核心数据获取特定对象
问题描述:
- (NSManagedObjectContext *)anObjectByEntityForName:(NSString *)entityName withValue:(NSObject *)value forKeyPath:(NSString *)keyPath {
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:entityName inManagedObjectContext:self.managedObjectContext]];
[request setPredicate:[NSPredicate predicateWithFormat:@"%@ == %@", keyPath, value]];
NSError *error = nil;
NSMutableArray *mutableFetchResults = [[self.managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
if (!mutableFetchResults) {
[request release];
[mutableFetchResults release];
return nil;
}
if ([mutableFetchResults count] == 0) {
[request release];
[mutableFetchResults release];
return nil;
}
id anObject = [mutableFetchResults objectAtIndex:0];
[request release];
[mutableFetchResults release];
return anObject;
}
对于keypath“isSelected”和值@YES,此代码返回nil。但是如果没有谓词,则返回所有对象。在数据库中至少有1个符合条件的对象。什么可能是错误的惠特?核心数据获取特定对象
答
钥匙或关键路径,你必须使用%K格式:
[request setPredicate:[NSPredicate predicateWithFormat:@"%K == %@", keyPath, value]];
哇,这是那么容易......你有任何文档,这对苹果文档? –
已包含文档链接的更新答案:https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Predicates/Articles/pSyntax.html#//apple_ref/doc/uid/TP40001795-SW2 – bvogelzang