我使用这种方法,但不正确。
- (BOOL)checkExistByEntityName:(NSString *)entityName primaryKeyName:(NSString *)keyName primaryKey:(NSNumber *)primaryKey
{
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:managedObjectContext];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%@==%@", keyName, primaryKey];
[request setEntity:entity];
[request setPredicate:predicate];
NSError *error = nil;
NSInteger count = [managedObjectContext countForFetchRequest:request error:&error];
[request release];
if (count > 0) {
return YES;
} else {
return NO;
}
}
答案 0 :(得分:1)
Predicate programming guide是你的朋友。
格式字符串支持printf样式的格式参数,例如%x (请参阅“格式化字符串对象”)。两个重要的论点是%@和 %K
%@
是对象值的var arg替换 - 通常是字符串, 号码或日期。- %K是密钥路径的var arg替换。什么时候 使用
%@
将字符串变量替换为格式字符串 被引号括起来。如果要指定动态 属性名称,在格式字符串中使用%K
,如下所示 示例
NSString *attributeName = @"firstName";
NSString *attributeValue = @"Adam";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K like %@",
attributeName, attributeValue];
所以,只需使用
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K == %@", keyName, primaryKey];
希望有所帮助。