检查Core Data数据库中实体存在的通用方法

时间:2011-05-23 10:52:37

标签: iphone objective-c ios core-data

我想编写通用方法来检查给定实体是否在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;
    }
}

然而,看起来我编写的谓词中的字符串@"%@ = %@"未正确解析。有没有办法在谓词中没有硬编码实体属性的情况下实现所描述的功能?

3 个答案:

答案 0 :(得分:3)

在下面的链接中查看动态媒体资源名称。 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Predicates/Articles/pCreating.html

而不是%@,使用%K可以解决您的问题

答案 1 :(得分:0)

你需要==不=(我想......)

答案 2 :(得分:0)

您可以使用countForFetchRequest方法。