在Xcode 3.X中,您应该右键单击获取请求模板的谓词编辑器中的空白,以指定变量输入而不是硬编码谓词。
XCode 4中的这个位置是什么?我已经选择了,右键单击,选项单击等,但无法弄清楚....
答案 0 :(得分: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];
如果已记录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);
对于图形环境有点笨拙但它有效。
答案 1 :(得分:11)
这已经在Xcode 4中进行了调整。为了使用替换变量,你需要从弹出菜单中选择“Expression”(即代替属性名称),你可以输入如下的等价物:{{1} }
如果您只是在每个属性的字段中输入$ VARIABLE值,您将得到错误的结果。实际上,某些属性不允许使用诸如Date属性之类的强制输入值。
当然你可以使用多个变量。
然后就像执行获取请求一样:
name == $SEARCH_NAME
请注意,您也可以取消弹出属性,只需单击编辑器右上角的按钮(看起来就像默认网格视图按钮旁边的线条),然后立即输入您的表达式。这是查看日期之类的翻译方式的好方法。