2 つの属性「uid」、「description」を持つ「ItemModel」と呼ばれる 90 個の CoreData エンティティがあり、各項目は NSManagedObject として挿入されます。
NSManagedObject *object = [NSEntityDescription insertNewObjectForEntityForName: @"ItemModel" inManagedObjectContext: AFYDelegate.managedObjectContext];
最初のサーバー呼び出しは、キー「uid」に対して上記で取得した 90 個のアイテムのそれぞれに「uid」を割り当てます。コンテキストはここには保存されません。
後の 2 回目のサーバー呼び出しで、indexPath を使用して NSManagedObjectごとに90 項目の「説明」を更新するのが好きです。各オブジェクトを取得して次のメソッドに渡し、コンテキストを保存します。
[self updateItemToDataModel:object withData: description];
....
....
- (void)updateItemToDataModel:(NSManagedObject *) object withData:(NSString *)data
{
[object setValue:data forKey:@"description"];
NSError * error = nil;
if (![self.managedObjectContext save:&error]) {
//Handle any error with the saving of the context
NSLog(@"%@",error.localizedDescription);
}
}
上記は CoreData の更新では正常に機能しますが、シミュレーターを閉じてコードを再度実行した後、同じ「uid」と「description」を持つアイテムごとに 2 つの重複があります。これは、現在 180 個のアイテムがあることを意味します。コードを繰り返し閉じて実行すると、ますます多くのアイテムが作成されます。
updateItemToDataModel メソッドを削除して、シミュレーターをリセットしてみましたが、90 個のアイテムで正常に動作します。
誰かが助けてくれれば、CoreData は初めてです。既存のアイテムのみを更新したい場合、コードの何が問題になっていますか?