2017-03-04 159 views
0

我使用magicalrecord在我的應用程序來管理coredata,每一件事情現在是完美的,但我有一個問題,我創建使用此代碼10K實體:MagicalRecord節省花費時間

[MagicalRecord saveWithBlockAndWait:^(NSManagedObjectContext * _Nonnull localContext) { 

Person *person = [Person MR_createEntityInContext:localContext]; 
person.organization = [Organization MR_findfirstInContext:localContext]; 
person.name = name; 
person.id = id; 
person.age = age; 

]}; 

創建10K記錄時後我使用魔法記錄在數據庫中執行任何更改,它會在保存到根上下文時停留4或5秒,這使得UI Freez無論它在主線程還是後臺線程上都可用。

編輯: 我已經找到了問題,如果我刪除的關係(即組織)從保存阻止它不被卡住,如果我是從側的塊中提取的組織和分配在內部保存阻止它拋出組織在不同情況下創建的例外。

+1

爲什麼創建10K實體應該是快?只是不要使用阻止呼叫並向用戶顯示進度指示器。 – Sulthan

+0

不是我的問題不是關於快速創建,而是關於如果我有10k個實體或更多存儲到根上下文需要時間。 –

+0

您可能需要創建10k個實體,然後保存在該上下文中,而不是創建1個實體,將其保存在該上下文中,然後重複10k。 – Larme

回答

0
//case A 
[MagicalRecord saveWithBlockAndWait:^(NSManagedObjectContext *localContext) { 

    NSLog(@"current thread is main thread %d and thread is %@", [NSThread isMainThread], [NSThread currentThread]); 

    //some ManagedObject code 
    ... 
}]; 

//case B 
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) { 

    NSLog(@"current thread is main thread %d and thread is %@", [NSThread isMainThread], [NSThread currentThread]); 

    //some ManagedObject code 
    ... 
}]; 

測試這段代碼,你會發現情況A總是在MainThread運行,如果你有10K實體店,UI會被卡住。

enter image description here

看這個https://github.com/magicalpanda/MagicalRecord/blob/master/Docs/Saving-Entities.md