0

我尝试在不同的线程中从网上获取东西。

  1. 我使用了一个新的托管对象上下文。我将主线程的 managedobjectcontext 设置为父线程。
  2. 我保存新的托管对象上下文
  3. 我收集 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 与 类似NSLogConvertEachElementToAnother将简单地遍历数组并将每个元素转换为数组到其他东西。在另一个数组中返回其他东西。

结果:

[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