问题描述
|
我想编写一种通用方法来检查给定实体是否在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;
}
}
但是,看来我写的谓词中的字符串@\"%@ = %@\"
没有正确解析。有没有在谓词中不对实体属性进行硬编码的情况下实现所描述功能的方法?
解决方法
在下面的链接中查看动态属性名称。
http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Predicates/Articles/pCreating.html
代替
%@
,使用%K
应该可以解决您的问题
,您需要==不需要=(我认为...)
,您可以使用countForFetchRequest方法。