我想编写通用方法来检查给定实体是否在Core Data数据库中。我想有一个适用于所有实体的方法。我想出了类似的东西:
-(BOOL)checkIfExistsEntity:(NSString *)entityName withFieldName:(NSString *)fieldName andFieldValue:(NSString *)value{
NSManagedObjectContext *managedObjectContext = [(FGuideAppDelegate *) [[UIApplication sharedApplication] delegate] managedObjectContext];
NSEntityDescription *selectEntityDescription = [NSEntityDescription
entityForName:entityName inManagedObjectContext:managedObjectContext];
NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];
[fetchRequest setEntity:selectEntityDescription];
NSPredicate *whereForFetch = [NSPredicate predicateWithFormat:@"%@ = %@",fieldName, value];
[fetchRequest setPredicate:whereForFetch];
NSError *error = nil;
NSArray *array = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (array != nil && [array count] > 0){
return YES;
}else {
return NO;
}
}
然而,看起来我编写的谓词中的字符串@"%@ = %@"
未正确解析。有没有办法在谓词中没有硬编码实体属性的情况下实现所描述的功能?
答案 0 :(得分:3)
在下面的链接中查看动态媒体资源名称。 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Predicates/Articles/pCreating.html
而不是%@
,使用%K
可以解决您的问题
答案 1 :(得分:0)
你需要==不=(我想......)
答案 2 :(得分:0)
您可以使用countForFetchRequest方法。