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

时间:2011-08-17 21:16:24

标签: objective-c core-data xcode4

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

XCode 4中的这个位置是什么?我已经选择了,右键单击,选项单击等,但无法弄清楚....

Variable in Fetch Request Template Editor Predicate

2 个答案:

答案 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

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