0

我有一個JSON響應,看起來像這樣(簡化)對象:解析JSON到核心數據在後臺

houses: [ 
    { 
     id: "1", 
     color: "red", 
     windows: [ 
      { 
       id: "1", 
       type: "large", 
       numPanes: 3 
      }, 
      { 
       id: "2", 
       type: "small", 
       numPanes: 2 
      }, 
     ], 
     doors: [ 
      { 
       id: "33", 
       size: "large", 
       color: "gray" 
      }, 
      { 
       id: "12", 
       size: "large", 
       color: "blue" 
      }, 
     ], 

    }, 
    { 
     id: "2", 
     color: "purple", 
     windows: [ 
      { 
       id: "6", 
       type: "medium", 
       numPanes: 4 
      }, 
      { 
       id: "8", 
       type: "small", 
       numPanes: 2 
      }, 
     ], 
     doors: [ 
      { 
       id: "38", 
       size: "large", 
       color: "green" 
      }, 
      { 
       id: "42", 
       size: "large", 
       color: "orange" 
      }, 
     ], 

    } 
] 

我需要保存每個房子在覈心數據,並顯示它們,說在一個表視圖。現在我在做這樣的事情:

for each house: 
    NSManagedObjectContext* context = [NSManagedObjectContext MR_contextForCurrentThread]; 
    ...set properties of the House entity 
    [house save:context]; 
    for each window 
     NSManagedObjectContext* context = [NSManagedObjectContext MR_contextForCurrentThread]; 
     ...set properties of the Window entity 
     [window save:context]; 
     [house addWindowObject:window]; 
    for each door 
     NSManagedObjectContext* context = [NSManagedObjectContext MR_contextForCurrentThread]; 
     ...set properties of the Door entity 
     [door save:context]; 
     [house addDoorObject:door]; 
    [house save]; 

的保存方法是這樣的:

- (void)save:(NSManagedObjectContext *)context { 
    if (context == nil) { 
     context = [NSManagedObjectContext MR_contextForCurrentThread]; 
    } 

    [context MR_saveToPersistentStoreWithCompletion:^(BOOL success, NSError* error) { 

    }]; 
} 

的問題是,這一切的核心數據保存似乎阻塞主線程,並作爲新的房屋從飼料中讀入並處理成核心數據,滾動視圖變得不穩定。 Time Profiler似乎將save方法指向需要一些處理器時間的事情。

我正在使用MagicalRecord,但我認爲這個問題適用即使我不是。如何構造數據處理以便不阻塞主線程?

顯示房屋視圖控制器看起來像這樣當它到達房屋新一批:

for (NSDictionary* houseInfo in houses) { 
    House* house = [DataManager houseFromJSON:houseInfo]; 
    [_houseData addObject:house]; 
} 

回答

0

我們剛剛有一些修正,希望能解決阻斷主線程的問題更新MagicalRecord保存。 Have a look

+1

對於我們這些不使用魔法記錄的人,你能描述一下你所做的改變嗎?這不是爲了回答原來的問題,而是爲社區帶來教育效益。 – Tommy

+0

@casademora感謝您的提示。如果更新MR「神奇地」解決了這個問題,那將會很棒。我會試試看。雖然我沒有看到關於後臺問題的任何內容或阻止發佈說明中的主線程。那是以前的版本嗎?另外,我怎麼知道我使用的是哪個版本? – soleil

+0

@Tommy然而,我不確定此刻的修復是什麼。 – casademora