做一個NSManagedObject的新實例我研究了大量關於後臺線程的核心數據的帖子,我覺得我理解(在紙上)需要做什麼上。我想我們會看到。我正在將現有的OS X應用程序遷移到Core Data,並且在異步線程上遇到問題,使我的NSManagedObject
的新實例出現問題。我不能在後臺線程與非主MOC
這裏是我的權利運行代碼的樣本我已經移動到後臺線程後:
NSLog(@"JSON 1");
NSManagedObjectContext * context = [[NSManagedObjectContext alloc] init];
[context setPersistentStoreCoordinator:[[NSApp delegate] persistentStoreCoordinator]];
asset = (MTAssetInfo*)[NSEntityDescription insertNewObjectForEntityForName:@"Info" inManagedObjectContext:context];
NSLog(@"JSON 2");
其結果是,第一個日誌消息(@"JSON 1")
被調用31次,而第二個(@"JSON 2")
永遠不會被調用。該對象未被正確製作並返回。
這個Info
實體的模型相當複雜,有幾個可變形的屬性可能會或可能不會正確設置。奇怪的是,在主線程上運行類似的代碼,主MOC工作得很好。沒有問題。
編輯 - 一些更多的上下文
異步調用來源於此:
for (NSNumber *sectionID in sectionsToShow) {
dispatch_group_async(group, queue, ^{
MTAssetInfo *asset = [self assetWithRefID:[sectionID unsignedIntegerValue]];
if (asset != nil) {
[sectionsLock lock];
[sectionsTemp addObject:asset];
[sectionsLock unlock];
}
});
}
的assetWithRefID
方法從來沒有因爲其他的代碼片段的對象返回。它永遠不會成功從後臺線程的上下文中抽取NSManagedObject。
你能解釋一下你的意思嗎?結果是第一個日誌消息被調用了31次,而第二個日誌消息從未被調用。然後,如果可能的話提供其他代碼。沒有細節,很難發生什麼。謝謝。 –
請添加一個調用此線程的示例。細節是獲得幫助的關鍵。 –
我指的是代碼中包含的兩條NSLog消息。從字面上看,控制永遠不會超出我應該讓我的對象返回的路線。 JSON 2 NSLog消息從不執行。 – Westley