MagicalRecord를 사용하여 대량의 엔티티를 한 번에 가져 오려고하지만 saveToPersistentStoreWithCompletion이 콘솔 내에 여러 번 인쇄되고 시간이 오래 걸립니다. 완전한.MagicalRecord saveToPersistentStoreWithCompletion이 여러 번 발생하여 지연/UI 차단이 많이 발생합니다.
이것은 저장 블록입니다.
[[NSManagedObjectContext MR_contextForCurrentThread] MR_saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) {
NSLog(@"Saved the database changes");
}];
저장해야 할 항목이 많지만 동일한 정보의 컨텍스트를 둘 이상 저장하는 MagicalRecord의 정상적인 동작입니까? 그렇다면 백그라운드에서 한 컨텍스트 만 저장하면됩니까?
미리 도움을 청하십시오.
-[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x18df55f0) → Saving <NSManagedObjectContext (0x18df55f0): *** UNNAMED ***> on *** BACKGROUND THREAD ***
-[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x18df55f0) → Save Parents? 1
-[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x18df55f0) → Save Synchronously? 0
-[NSManagedObjectContext(MagicalRecord) MR_contextWillSave:](0x18df55f0) Context UNNAMED is about to save. Obtaining permanent IDs for new 18677 inserted objects
-[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x1765c3f0) → Saving <NSManagedObjectContext (0x1765c3f0): *** DEFAULT ***> on *** BACKGROUND THREAD ***
-[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x1765c3f0) → Save Parents? 1
-[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x1765c3f0) → Save Synchronously? 0
-[NSManagedObjectContext(MagicalRecord) MR_contextWillSave:](0x1765c3f0) Context DEFAULT is about to save. Obtaining permanent IDs for new 18677 inserted objects
-[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x1765de80) → Saving <NSManagedObjectContext (0x1765de80): *** BACKGROUND SAVING (ROOT) ***> on *** MAIN THREAD ***
-[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x1765de80) → Save Parents? 1
-[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x1765de80) → Save Synchronously? 0
-[NSManagedObjectContext(MagicalRecord) MR_contextWillSave:](0x1765de80) Context BACKGROUND SAVING (ROOT) is about to save. Obtaining permanent IDs for new 18677 inserted objects
__70-[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:]_block_invoke25(0x1765de80) → Finished saving: <NSManagedObjectContext (0x1765de80): *** BACKGROUND SAVING (ROOT) ***> on *** BACKGROUND THREAD ***
UPDATE 1 :
사용하여 다음이 꽤 시간을 줄일 수 있다는 사실 난 그냥 발견하지만 여전히 3 번 저장 것으로 보인다. 아무것도 당신이 지정 방법은 mainThread
에서 작업을 수행하는 사용하고있는 작업을 저장하기 때문에 당신은 UI-차단 & 보온재를 볼 이유
[MagicalRecord saveUsingCurrentThreadContextWithBlock:^(NSManagedObjectContext *localContext){
} completion:^(BOOL success, NSError *error){
NSLog(@"Saved the database changes");
}];
이 방법을 사용하면 데이터가 저장되지 않습니다. NSLog는 다음과 같이 말합니다 : - [NSManagedObjectContext (MagicalSaves) MR_saveWithOptions : completion :] (0x1d205090) ** 알 수없는 ** 문맥에 변화가 없음 - –
@WillRoberts가 현재이 시점에서 적절한 해결책은 무엇입니까? 이 방법을 사용하고 싶지만 올바른 컨텍스트를 사용하지 않는 것처럼 보입니다. –