检查核心数据数据库中实体存在的通用方法

问题描述

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...