Estoy usando MagicalRecord 2.0.3 y realmente no puedo entender cómo guardar datos en segundo plano.¿Cómo crear múltiples objetos en el fondo?
Según la documentación, algo como esto debería funcionar:
[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext) {
// Do this hundreds of times
[MyObject createInContext:localContext];
}];
Sin embargo, nada se guarda en la base de datos. He visto a varias personas publicar soluciones similares a esta:
[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext) {
// Do this hundreds of times
[MyObject createInContext:localContext];
} completion:^{
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
[[NSManagedObjectContext defaultContext] saveNestedContexts];
}];
}];
Esto hace guardar mis datos en la base de datos, sin embargo, ya que el ahorro que sucede en el hilo principal, mi solicitud no responde por un tiempo (con mi conjunto de datos, unos 3 segundos, que es demasiado tiempo).
También he probado esto, pero también bloquea a la vez que ahorra:
self.queue = [[NSOperationQueue alloc] init];
[self.queue addOperationWithBlock:^{
NSManagedObjectContext *localContext = [NSManagedObjectContext contextForCurrentThread];
// Do this hundreds of times
[MyObject createInContext:localContext];
[localContext saveNestedContexts];
}];
Y, por último, el mismo efecto de bloqueo con este código:
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];
});
Así que, ¿cuál es la mejor manera de para resolver esto? Necesito crear cientos de objetos en segundo plano y la aplicación debe seguir siendo receptiva.
Los nuevos contextos anidados han comenzado a causar estragos en gran parte de las API de verano en MagicalRecord. Si bien conozco estos problemas y ahora se están discutiendo algunas soluciones, siempre estoy abierto a sugerencias. – casademora
Tal vez sea mejor que use Core Data sin un framework como MR? – Hunter
¿Alguna vez encontró una solución usando MagicalRecord? Tengo los mismos problemas (bloqueo de UI mientras actualizo en segundo plano) y no puedo encontrar una solución. ¡Gracias! – RyanG