¿Es realmente tan simple ahora en iOS5?Recuperación de fondo de datos básicos a través de NSPrivateQueueConcurrencyType
que utiliza para llevar a cabo un fondo traiga utilizando este código en mi AppDelegate:
dispatch_queue_t downloadQueue = dispatch_queue_create("DownloadQueue", NULL);
dispatch_async(downloadQueue, ^{
self.myDownloadClass = [[MyDownloadClass alloc]initInManagedObjectContext:self.managedObjectContext];
[self.myDownloadClass download];
});
dispatch_release(downloadQueue);
Mi clase de descarga realiza una NSURLConnection se pudieron obtener algunos datos XML, utiliza NSXMLParser para analizar los datos, y luego actualiza un esquema complejo en datos básicos Siempre cambiaba al hilo principal para actualizar realmente los datos centrales. código desordenado, con una gran cantidad de llamadas a dispatch_sync (dispatch_get_main_queue() ....
Mi nuevo código es el siguiente:
NSManagedObjectContext *child = [[NSManagedObjectContext alloc]initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[child setParentContext:self.managedObjectContext];
[child performBlock:^{
self.myDownloadClass = [[MyDownloadClass alloc]initInManagedObjectContext:child];
[self.myDownloadClass download];
}];
junto con un pequeño cambio en algún otro código en mi AppDelegate para establecer el padre modelo de objetos de tipo de contexto a NSMainQueueConcurrencyType:
- (NSManagedObjectContext *)managedObjectContext
{
if (__managedObjectContext != nil)
{
return __managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil)
{
__managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
[__managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return __managedObjectContext;
}
parece que funciona muy bien todo el proceso de actualización aún se ejecuta en un hilo separado, pero yo no tenga que crear un hilo parece que la magia
...Solo recuerde que si desea enviar sus cambios a los archivos físicos de datos centrales, tiene que guardar la llamada: en el contexto principal también.
Realmente no hice una pregunta aquí. Estoy publicando esto, así que ayuda a los demás porque todo lo que encontré cuando buscaba los nuevos métodos de contexto de objetos administrados iOS5 solo proporcionaba detalles de alto nivel sin ejemplos de código Y todas las otras búsquedas para buscar datos básicos en el fondo son antiguas, a veces muy antiguas y analiza cómo hacerlo antes de iOS5.
¿es realmente así de fácil? – timthetoolman
¡gracias por compartir! – Max
y después de eso debe guardar los cambios –