【发布时间】:2011-10-29 07:12:22
【问题描述】:
在 Xcode 3.X 中,您应该在获取请求模板的谓词编辑器中右键单击空白以指定变量输入而不是硬编码谓词。
这是在 XCode 4 中的什么地方?我已经按住选项,右键单击,单击选项等,但无法弄清楚....
【问题讨论】:
标签: objective-c core-data xcode4
在 Xcode 3.X 中,您应该在获取请求模板的谓词编辑器中右键单击空白以指定变量输入而不是硬编码谓词。
这是在 XCode 4 中的什么地方?我已经按住选项,右键单击,单击选项等,但无法弄清楚....
【问题讨论】:
标签: objective-c core-data xcode4
我认为 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);
对于图形环境来说有点笨拙,但它可以工作。
【讨论】:
这已在 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]);
请注意,您也可以取消属性弹出窗口,只需单击编辑器右上角的按钮(看起来像默认网格视图按钮旁边的线条),然后直接输入您的表达式。这是查看日期等内容如何翻译的好方法。
【讨论】: