別のスレッドで Web から情報を取得しようとしています。
- 新しい managedobject コンテキストを使用しました。メイン スレッドの managedobjectcontext を親として設定します。
- 新しい managedobject コンテキストを保存します
- managedobjectid を収集します (これは永続的なものになっているはずです)。
さて、問題はそれが永続的ではないということです。のobjectID
はmanagedObjectModel
そのままです。
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;
}]);
ここで、PO は と同様NSLog
です。ConvertEachElementToAnother
単に配列を調べて、配列の各要素を別のものに変換します。他の何かが別の配列で返されること。
結果:
[Catalogs convertEachElementToAnother:(id)^(id element){ BGCatalogData * data = (BGCatalogData*) element; NSManagedObjectID * theObjectID= data.objectID; return theObjectID; }]: (
"0x8d26df0 <x-coredata:///BGCatalogData/tA2D6533A-00E2-4BD7-8A68-49944BC4DD18603>",
"0x8d24fe0 <x-coredata:///BGCatalogData/tA2D6533A-00E2-4BD7-8A68-49944BC4DD18609>",
"0x8d24930 <x-coredata:///BGCatalogData/tA2D6533A-00E2-4BD7-8A68-49944BC4DD18615>",
"0x8d23520 <x-coredata:///BGCatalogData/tA2D6533A-00E2-4BD7-8A68-49944BC4DD18621>"
)
(lldb) po error
(NSError *) $1 = 0xb0102d28 [no Objective-C description available]
2012-11-16 15:57:18.763 BadgerNew[29395:1d03] [Catalogs convertEachElementToAnother:(id)^(id element){ BGCatalogData * data = (BGCatalogData*) element; NSManagedObjectID * theObjectID= data.objectID; return theObjectID; }]: (
"0x8d26df0 <x-coredata:///BGCatalogData/tA2D6533A-00E2-4BD7-8A68-49944BC4DD18603>",
"0x8d24fe0 <x-coredata:///BGCatalogData/tA2D6533A-00E2-4BD7-8A68-49944BC4DD18609>",
"0x8d24930 <x-coredata:///BGCatalogData/tA2D6533A-00E2-4BD7-8A68-49944BC4DD18615>",
"0x8d23520 <x-coredata:///BGCatalogData/tA2D6533A-00E2-4BD7-8A68-49944BC4DD18621>"
)
ここではobjectID
、NSManagedObject
のめり込みは全く変わりません。
エラーがゼロであることを確認しました。コードは問題なく動作します。たまにだけ。保存後に ID が変わらない理由が気になります。データはかなり大きいです。実はこんなことは初めてです。保存中に data.ObjectID が変更されることを期待する必要がありますか? 私が尋ねた理由は、managedObject コンテキストの親が managedObject コンテキストであり、永続ストアが「メモリ内」にあるためです。