我有兩個管理對象上下文設置這樣一個應用程序:核心數據:兒童上下文是否獲得新插入對象的永久對象ID?
- 父上下文:NSPrivateQueueConcurrencyType,聯繫到持久性存儲。
- 主要上下文:NSMainQueueConcurrencyType,父上下文的子項。
當插入一個新的管理對象主要方面,我省的主要方面,然後像這樣父上下文:
[context performBlockAndWait:^{
NSError * error = nil;
if (![context save: &error]) {
NSLog(@"Core Data save error %@, %@", error, [error userInfo]);
}
}];
[parentContext performBlock:^{
NSError *error = nil;
BOOL result = [parentContext save: &error];
if (! result) {
NSLog(@"Core Data save error in parent context %@, %@", error, [error userInfo]);
}
}];
我的理解是,當管理對象第一次創建,它有一個臨時的objectID
。然後保存主要上下文,並使用其臨時ID獲取父對象。然後保存父上下文。保存最後一個上下文時,父上下文中的臨時objectID
轉換爲永久objectID
。
所以:
- 是否永久對象ID永遠都會自動回到 到主(子)進行上下文傳播?
- 當我強迫與
[NSManagedObjectContext obtainPermanentIDsForObjects:error:]
,然後後臺應用程序,激活它,重載獲取對象的永久編號,可以使用主上下文的objectWithID:
獲取對象和訪問屬性,我得到「CoreData可能沒有爲...做過錯「。
Jorge:我得到一個CoreData不能在兒童上下文中獲取永久ID並保存ManagedObject時發生故障。你知道是什麼原因嗎?謝謝 – 2014-06-17 22:29:45