我尝试在不同的线程中从网上获取东西。
- 我使用了一个新的托管对象上下文。我将主线程的 managedobjectcontext 设置为父线程。
- 我保存新的托管对象上下文
- 我收集 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 上下文,并且持久存储在“内存中”