0

別のスレッドで Web から情報を取得しようとしています。

  1. 新しい managedobject コンテキストを使用しました。メイン スレッドの managedobjectcontext を親として設定します。
  2. 新しい managedobject コンテキストを保存します
  3. managedobjectid を収集します (これは永続的なものになっているはずです)。

さて、問題はそれが永続的ではないということです。のobjectIDmanagedObjectModelそのままです。

    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>"
)

ここではobjectIDNSManagedObjectのめり込みは全く変わりません。

エラーがゼロであることを確認しました。コードは問題なく動作します。たまにだけ。保存後に ID が変わらない理由が気になります。データはかなり大きいです。実はこんなことは初めてです。保存中に data.ObjectID が変更されることを期待する必要がありますか? 私が尋ねた理由は、managedObject コンテキストの親が managedObject コンテキストであり、永続ストアが「メモリ内」にあるためです。

4

0 に答える 0