単純な推測としては、最近オブジェクトを追加したときに、永久 ID を作成するための特定の情報がわからないか、持っていないことが原因です。
罰金。
それから私はこれを読みました:getPermanentIDsForObjects:error:
指定された配列内のオブジェクトのオブジェクト ID を永続 ID に変換します。- (BOOL)obtainPermanentIDsForObjects:(NSArray )オブジェクト エラー:(NSError * )エラー
このメソッドは、objects 内の各管理対象オブジェクトのオブジェクト ID を永続 ID に変換します。オブジェクトには永続的な ID がありますが、保存されるまでisInserted に肯定的に応答します。永続的な ID を既に持っているオブジェクトはすべて無視されます。
まだストアに割り当てられていないオブジェクトは、保存操作中に Core Data が割り当てに使用するのと同じルールに基づいて割り当てられます (エンティティをサポートする最初の書き込み可能なストアで、インスタンスとその関連アイテムに適しています)。特別な考慮事項
よし、NSManagedObject を保存するまで一時的な ID を取得しました。でも
managedObjectContext を保存しても、NSManagedObjects の ID は更新されません。このコードが示すように、同じままです。
PO([Catalogs convertEachElementToAnother:(id)^(id element) {
BGCatalogData * data = (BGCatalogData*) element;
NSManagedObjectID * theObjectID= data.objectID;
return theObjectID;
}]);
NSError * error;
BOOL saveSuccesfully = [[BGMDCRManagedObjectContextThreadHandler managedObjectContext] save:&error];
PO([Catalogs convertEachElementToAnother:(id)^(id element){
BGCatalogData * data = (BGCatalogData*) element;
NSManagedObjectID * theObjectID= data.objectID;
return theObjectID;
}]);'
modへの注意:上記をコードに変換できません
結果は次のとおりです。
[Catalogs convertEachElementToAnother:(id)^(id element){ BGCatalogData * data = (BGCatalogData*) element; NSManagedObjectID * theObjectID= data.objectID; return theObjectID; }]: (
"0x888a340 <x-coredata:///BGCatalogData/t084E0F43-A129-4023-8190-2962D8D0930A603>",
"0x888d670 <x-coredata:///BGCatalogData/t084E0F43-A129-4023-8190-2962D8D0930A609>",
"0x888ed50 <x-coredata:///BGCatalogData/t084E0F43-A129-4023-8190-2962D8D0930A615>",
"0x888f690 <x-coredata:///BGCatalogData/t084E0F43-A129-4023-8190-2962D8D0930A621>"
)
2012-11-16 15:33:28.489 BadgerNew[26871:1d03] [Catalogs convertEachElementToAnother:(id)^(id element){ BGCatalogData * data = (BGCatalogData*) element; NSManagedObjectID * theObjectID= data.objectID; return theObjectID; }]: (
"0x888a340 <x-coredata:///BGCatalogData/t084E0F43-A129-4023-8190-2962D8D0930A603>",
"0x888d670 <x-coredata:///BGCatalogData/t084E0F43-A129-4023-8190-2962D8D0930A609>",
"0x888ed50 <x-coredata:///BGCatalogData/t084E0F43-A129-4023-8190-2962D8D0930A615>",
"0x888f690 <x-coredata:///BGCatalogData/t084E0F43-A129-4023-8190-2962D8D0930A621>"
)
オブジェクトが保存される前に、 obtainPermanentIDsForObjects を呼び出して、オブジェクトに永続的な ID を与えることができます。
では、なぜ IOS は永続的な ID を与えるために保存するまで待つ必要があるのでしょうか? なぜすぐにしないのですか?