Xcode 4: выборочные переменные шаблона запроса? - PullRequest
15 голосов
/ 18 августа 2011

В Xcode 3.X вы должны были щелкнуть правой кнопкой мыши пробел в редакторе предикатов шаблона запроса на выборку, чтобы указать переменный ввод, а не жестко закодированный предикат.

Где это в XCode 4? Я держал опцию, щелкнул правой кнопкой мыши, щелкнул опцией, и т. Д. И не могу понять это ...

Variable in Fetch Request Template Editor Predicate

Ответы [ 2 ]

18 голосов
/ 18 августа 2011

Я не думаю, что у X4 больше есть переменная.

Вместо этого я думаю, что вам нужно выбрать выражение, а затем предоставить переменную вида $VARNAME.

Например, учитывая и сущность Alpha с атрибутом aString, я создал шаблон запроса на выборку bobFetch с выражением aString == $TESTVAR.

Alpha *a=[NSEntityDescription insertNewObjectForEntityForName:@"Alpha" inManagedObjectContext:self.moc];
a.aString=@"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);

Вид неуклюжий для графическогосреда, но это работает.

11 голосов
/ 04 февраля 2012

Это было изменено в Xcode 4. Чтобы использовать переменные подстановки, вам нужно выбрать «Expression» из всплывающего меню (то есть вместо имени атрибута), и вы можете ввести эквивалент, подобный этому: 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]);

Обратите внимание, что вы также можете покончить с всплывающими атрибутами и просто нажать кнопку в правом верхнем углу редактора (выглядит как линии рядом с кнопкой просмотра сетки по умолчанию)и просто введите свое выражение сразу.Это хороший способ увидеть, как переводятся некоторые вещи, такие как даты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...