下面是我的查找或创建代码:
+ (id)checkIfEntity:(NSString *)entityName
withIDValue:(NSString *)entityIDValue
forIDKey:(NSString *)entityIDKey
existsInContext:(NSManagedObjectContext *)context
{
// Create fetch request
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setReturnsObjectsAsFaults:NO];
// Fetch messages data
NSEntityDescription *description = [NSEntityDescription entityForName:entityName inManagedObjectContext:context];
[request setEntity:description];
// Only include objects that exist (i.e. entityIDKey and entityIDValue's must exist)
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%@=%@", entityIDKey, entityIDValue];
[request setPredicate:predicate];
// Execute request that returns array of dashboardEntrys
NSArray *array = [context executeFetchRequest:request error:nil];
if ( [array count] ) {
NSLog(@"%@ = %@ DOES EXIST", entityIDKey, entityIDValue);
return [array objectAtIndex:0];
}
NSLog(@"%@ = %@ DOES NOT EXIST", entityIDKey, entityIDValue);
return [NSEntityDescription insertNewObjectForEntityForName:entityName inManagedObjectContext:context];
}
请忽略这样一个事实,即我没有通过两个 return 语句来采用最佳实践——我会在将我的代码推送到生产之前这样做。
它通过传递一个 NSManagedObject 实体来工作entityName
,并且有一个 NSPredicate 来检查是否有一个entityIDKey
with 值entityIDValue
;entityIDKey = entityIDValue
. 我也尝试过使用==
.
无论我使用哪种比较方法,该if ( [array count] )
方法都不会被命中,因此第二NSLog
条语句总是得到输出,说明我知道存在于我的 Core Data 存储中的对象实际上并不存在。因此,当我去显示我的商店的内容时,我最终会得到许多重复的条目。
我的 NSPredicate 语句是否正确?
`NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%@=%@", entityIDKey, entityIDValue];`
在哪里entityIDKey = @"userID"
和entityIDvalue = @"1234567890"
谢谢!