¿Cuál es el método de reemplazo para esta llamada obsoleta MagicalRecord?

¿Cómo puedo encontrar el método de reemplazo en MagicalRecord para esto (que ha sido desaprobado)? Miré Google, SO y los documentos; nada parece ser un reemplazo, y por supuesto, nada en los documentos le dice qué reemplazó el método en desuso. : – {

[[NSManagedObjectContext MR_contextForCurrentThread] MR_saveErrorHandler:^(NSError *error) 

El método obsoleto en cuestión es:

 [NSManagedObjectContext MR_contextForCurrentThread] 

Escribí una pequeña publicación en el blog sobre esto hace un tiempo, aunque admito que está en mi blog personal, y no en ningún documento oficial. Pero, TL; DR, la conclusión es que, en el mundo de GCD y las colas, no se puede garantizar un mapeo 1-1 de una cola a un hilo, a pesar de que GCD se ejecuta en hilos. La forma de asegurarse de que las cosas funcionen para usted está utilizando el siguiente patrón:

 [MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) { //make your changes in the localContext }]; 

Esto resuelve los sutiles problemas de subprocesos cruzados que contextForCurrentThread en contextForCurrentThread simplemente imponiendo la regla de que debe hacer todo el trabajo en un subproceso diferente en un contexto específico de subproceso. Al crear un nuevo contexto cada vez que guardas y no reutilizas el contexto, garantizarás que no se crucen los hilos y que no se bloquee la aplicación el 1% del tiempo.

casademora es correcta, pero trataré de ser más preciso porque encuentro algunos problemas al convertir mi

  [[NSManagedObjectContext MR_contextForCurrentThread] MR_saveToPersistentStoreWithCompletion:nil]; 

dentro

  [MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) 

Tienes que tener cuidado de cambiar o crear tus entidades dentro del bloque, pero no es suficiente.

Para recuperar sus entidades, debe usar una solicitud de selección con contexto también.

 MR_findFirstByAttribute:withValue 

no es suficiente y las actualizaciones no se guardarán. Tienes que usar en cambio

 MR_findFirstByAttribute:withValue:InContext:localContext 

Y al crear entidad, es lo mismo

 MR_createEntity 

debe cambiarse a

 MR_createEntityInContext:localContext 

Entonces funciona como un encanto 🙂

Intereting Posts