我们假设我从远程Web服务下载数据。更准确地说,我从Web服务下载新闻列表,每个新闻都有一个newsID,我们可以将其视为服务的主键,因此我们找不到两个相同的newsID。
我怎样才能确定我只插入一个尚未存在的newsID的数据?
我用这种方法起草了我的解决方案:
- (BOOL)validateNewsID:(NSNumber **)newsID error:(NSError **)error
{
NSError *countError = nil;
NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];
[fetchRequest setEntity:[self entity]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"newsID == %@", *newsID];
[fetchRequest setPredicate:predicate];
NSUInteger resultCount = [SharedManagedObjectContext countForFetchRequest:fetchRequest error:&countError];
if (countError) {
OLog(countError);
*error = countError;
return NO;
}
if (resultCount > 0) {
NSString *errorString = @"NewsID should be unique";
NSDictionary *userInfoDict = [NSDictionary dictionaryWithObject:errorString
forKey:NSLocalizedDescriptionKey];
NSError *uniquenessError = [[[NSError alloc] initWithDomain:kNewsValidationDomain
code:kNewsValidationUniquenessCode
userInfo:userInfoDict] autorelease];
*error = uniquenessError;
return NO;
}
return YES;
}
但是没有按预期工作,因为,我想,当我执行获取请求时,我发现我的同一个对象先前在上下文中插入。我错了吗?
我该如何解决?
答案 0 :(得分:0)
好像你会找到你想要验证的同一个对象。尝试其中之一:
resultCount > 0
更改为resultCount > 1
。