Core Data アプリケーション (リンク)へのインポートを扱う 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 を返します。したがって、私の問題。この問題が問題になる可能性がある場所は他にありません。何かご意見は?
マイク・ライリー