Xcode 4: переменные шаблона запроса на выборку?
В Xcode 3.X вы должны были щелкнуть правой кнопкой мыши пробел в редакторе предикатов шаблона запроса выборки, чтобы указать переменный ввод, а не жестко запрограммированный предикат.
Где это в XCode 4? Я сохранил опцию, щелкнул правой кнопкой мыши, нажал кнопку "Option" и т.д. И не мог понять это.
![Variable in Fetch Request Template Editor Predicate]()
Ответы
Ответ 1
Я не думаю, что X4 имеет переменную больше.
Вместо этого, я думаю, вам нужно выбрать выражение, а затем предоставить переменную формы $VARNAME
.
Например, данный и объект Alpha
с атрибутом aString
, я создал шаблон запроса выборки bobFetch
с выражением aString == $TESTVAR
.
Alpha *a=[NSEntityDescription insertNewObjectForEntityForName:@"Alpha" inManagedObjectContext:self.moc];
[email protected]"steve";
[self saveContext];
NSDictionary *subVars=[NSDictionary dictionaryWithObject:@"steve" forKey:@"TESTVAR"];
NSFetchRequest *fetchRequest = [self.managedObjectModel fetchRequestFromTemplateWithName:@"bobRequest" substitutionVariables:subVars];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Alpha" inManagedObjectContext:self.moc];
[fetchRequest setEntity:entity];
Если зарегистрировано fetchRequest
отчетов:
<NSFetchRequest: 0x4d17480> (entity: Alpha; predicate: (aString == "steve"); sortDescriptors: ((null)); type: NSManagedObjectResultType; )
... и может затем использоваться обычно.
NSError *error = nil;
NSArray *fetchedObjects = [self.moc executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects == nil) {
NSLog(@"fetch error = %@",error);
}
NSLog(@"fetchObjects = %@",fetchedObjects);
Вид неуклюжий для графической среды, но он работает.
Ответ 2
Это было изменено в Xcode 4. Чтобы использовать переменные замещения, вам нужно выбрать "Выражение" из всплывающего меню (т.е. вместо имени атрибута), и вы можете ввести эквивалент следующим образом: name == $SEARCH_NAME
Если вам нужно просто ввести значение $VARIABLE в поле для каждого атрибута, вы получите неправильный результат. Фактически, некоторые атрибуты не позволят такие атрибуты Date, где вы вынуждены вводить значение.
Конечно, вы можете использовать несколько переменных оттуда.
Затем он как и раньше выполнил запрос на выборку:
NSString *searchName = @"Mr Squiggle";
NSDictionary *subs = [NSDictionary dictionaryWithObject:searchName forKey:@"SEARCH_NAME"];
NSManagedObjectModel *model = [self managedObjectModel];
NSFetchRequest *req = [model fetchRequestFromTemplateWithName:@"trainerByName" substitutionVariables:subs];
NSError *error = nil;
NSArray *results = [[self managedObjectContext] executeFetchRequest:req error:&error];
NSLog(@"Found %ld record.", [results count]);
Обратите внимание, что вы также можете удалить всплывающее окно с атрибутами и просто нажать кнопку в правом верхнем углу редактора (выглядит как строки рядом с кнопкой просмотра сетки по умолчанию) и просто введите свое выражение сразу. Это хороший способ увидеть, как можно перевести некоторые вещи, такие как даты.