我正在处理来自 NSScreenCast 的代码示例,该示例处理导入到核心数据应用程序(链接)。我有大部分工作的例子。我可以按下刷新按钮,它解析 json 并将其导入数据库。但是,每次我按下刷新按钮时,它都会重新添加相同的数据。我已将其追溯到以下代码。
+ (Brewery *)breweryWithServerId:(NSInteger)serverId usingManagedObjectContext:(NSManagedObjectContext *)moc {
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:[Brewery entityName]];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"serverId = %d", serverId]];
[fetchRequest setFetchLimit:1];
NSError *error = nil;
NSArray *results = [moc executeFetchRequest:fetchRequest error:&error];
NSLog(@"results: %@", results);
if (error) {
NSLog(@"ERROR: %@ %@", [error localizedDescription], [error userInfo]);
exit(1);
}
if ([results count] == 0) {
return nil;
}
NSLog(@"results objectAtIndex:0 = %@", [results objectAtIndex:0]);
return [results objectAtIndex:0];
}
这种方法会发生什么是它尝试查看该项目是否已存在于数据库中。如果此调用返回 nil,则 MasterViewController 中的代码将其再次添加到数据库中。我已经进行了一些调试,并且 serverId 确实通过了。此外, fetchrequest 似乎是有效的(无法确定调试它)。如您所见,我为结果放置了一个 NSLog,但它返回一个空结果。因此,如果结果计数为 0,则返回 nil。因此我的问题。我没有看到这个问题可能成为问题的任何其他地方。有什么想法吗?
迈克·莱利