2012-11-16 27 views
0

一個簡單的猜測是因爲當我們最近添加的對象,我們不知道或沒有某些信息來創建永久ID。爲什麼我們需要NSManagedObject中的臨時ID

好。

然後我讀此: obtainPermanentIDsForObjects:錯誤:

轉換爲永久ID的給定陣列中的對象的對象ID。 - (BOOL)obtainPermanentIDsForObjects:(NSArray的)對象錯誤:(NSError *)錯誤

該方法每個被管理目標的對象的對象ID變換爲永久ID。雖然該對象將具有永久ID,但它仍會對isInserted 做出肯定迴應,直到它被保存爲。任何已有永久ID的對象都將被忽略。

尚未分配到一家商店的任何對象分配基於保存操作(第一個可寫專賣店配套的實體,和適當的實例及其相關項目)在覈心數據用來分配相同的規則。 特別注意事項

好的,所以我們得到臨時ID直到我們保存了NSManagedObject。但是

保存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; 
}]);' 

注到國防部:我不能轉換到上述代碼

導致:

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

我們可以給對象永久ID通過調用acquirePermanentIDsForObjects 之前該對象被保存。

那麼爲什麼IOS打擾等到保存給永久ID?爲什麼不馬上?

回答

0

因爲CoreData必須操縱潛在的持久存儲以'阻止'其他對象的永久ID(例如增加一個計數器)。如果你並不需要保存其不必要的和propably慢的事情之前permanentIDs(你可以用你的項目只是暫時的,從來沒有保存)足夠

+0

好。我仍然不明白爲什麼保存數據不會改變我的managedObjects的ID。 –

+0

我發現了原因。在將數據保存到父級後,我應該讓父級存儲數據。 –