Я использую 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];
});
Итак, каков наилучший способ решить эту проблему? Мне нужно создать сотни объектов в фоновом режиме, и приложение должно оставаться отзывчивым.