나는 MagicalRecord 2.0.3를 사용하고 있는데 정말 백그라운드에서 데이터를 저장하는 방법을 알아낼 수 없습니다.있는 배경에서 여러 개체를 만드는 방법?
문서에 따르면,이 같은 작업을해야합니다 :
[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext) {
// Do this hundreds of times
[MyObject createInContext:localContext];
}];
그러나, 아무것도 데이터베이스에 저장되지 않습니다. 내가 여러 사람이 이와 비슷한 솔루션을 게시 본 적이 :
[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext) {
// Do this hundreds of times
[MyObject createInContext:localContext];
} completion:^{
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
[[NSManagedObjectContext defaultContext] saveNestedContexts];
}];
}];
이 내 데이터 집합 (저장이 주 스레드에서 발생하기 때문에 그러나, 내 응용 프로그램은 잠시 동안 응답하지 않는 데이터베이스 내 데이터를 저장하지 않습니다, 길지 않은 약 3 초).
나는이 시도했다, 그러나 그것은 또한 블록까지 저장하는 동안 :
self.queue = [[NSOperationQueue alloc] init];
[self.queue addOperationWithBlock:^{
NSManagedObjectContext *localContext = [NSManagedObjectContext contextForCurrentThread];
// Do this hundreds of times
[MyObject createInContext:localContext];
[localContext saveNestedContexts];
}];
그리고 마지막으로,이 코드와 같은 차단 효과 :
dispatch_queue_t syncQueue = dispatch_queue_create("Sync queue", NULL);
dispatch_async(syncQueue, ^{
NSManagedObjectContext *localContext = [NSManagedObjectContext contextForCurrentThread];
// Do this hundreds of times
[MyObject createInContext:localContext];
[[NSManagedObjectContext contextForCurrentThread] saveNestedContexts];
});
그래서 가장 좋은 방법은 무엇입니까 이 문제를 해결하려면? 백그라운드에서 수백 개의 개체를 만들어야하고 앱이 응답 성을 유지해야합니다. 백그라운드에서 작업을 수행 할 때
일할 수있는 새로운 중첩 된 상황이 MagicalRecord에 저장하는 API의 대부분에 위력을 과시하기 시작했다 방법의 예를 찾을 수 있습니다. 이 문제를 알고 있고 수정 사항에 대해 지금 논의 중이지만 언제나 제안에 대해 열려 있습니다. – casademora
아마도 MR과 같은 프레임 워크없이 핵심 데이터를 사용하는 것이 가장 좋습니다. – Hunter
MagicalRecord를 사용하여 해결책을 찾았습니까? 동일한 문제 (백그라운드에서 업데이트하는 동안 UI 잠김)가 있고 솔루션을 찾을 수 없습니다. 감사! – RyanG