Xcode 4:获取请求模板变量?

Jes*_*nch 15 core-data objective-c xcode4

在Xcode 3.X中,您应该右键单击获取请求模板的谓词编辑器中的空白,以指定变量输入而不是硬编码谓词.

XCode 4在哪里?我已经选择了,右键单击,选项单击等,无法弄清楚....

获取请求模板编辑器谓词中的变量

Tec*_*Zen 18

我不认为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];
Run Code Online (Sandbox Code Playgroud)

如果记录fetchRequest报告:

<NSFetchRequest: 0x4d17480> (entity: Alpha; predicate: (aString == "steve"); sortDescriptors: ((null)); type: NSManagedObjectResultType; )
Run Code Online (Sandbox Code Playgroud)

......然后可以正常使用.

NSError *error = nil;
NSArray *fetchedObjects = [self.moc executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects == nil) {
    NSLog(@"fetch error = %@",error);
}
NSLog(@"fetchObjects = %@",fetchedObjects);
Run Code Online (Sandbox Code Playgroud)

对于图形环境来说有点笨拙但是有效.


sma*_*ice 11

这已经在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]);
Run Code Online (Sandbox Code Playgroud)

请注意,您也可以取消弹出属性,只需单击编辑器右上角的按钮(看起来就像默认网格视图按钮旁边的线条),然后立即输入您的表达式.这是查看日期等内容如何翻译的好方法.