Sto lavorando a un'app per iPhone che utilizza i dati principali. L'app effettua una chiamata a un servizio Web, analizza il file XML risultante e quindi crea o modifica gli oggetti di dati di base nella mia app. Gestisco già la chiamata al servizio web e analizzo in modo asincrono, ma ho passato i dati analizzati al thread principale per manipolare gli oggetti Core Data. Mi piacerebbe eseguire questo processo anche nel thread in background. (A 1-2 secondi di pausa non fa per una grande esperienza utente)Il thread NSPersistentStoreCoordinator è sicuro?
L'approccio più ovvio sarebbe quello di creare un contesto oggetto gestito specificamente per il filo di fondo, ma poi ho letto questa linea in Apple's Core Data Programming Guide:
Un coordinatore di negozio permanente fornisce ai propri contesti oggetto gestito la facciata di un negozio virtuale. Per operazioni completamente concorrenti è necessario un coordinatore diverso per ogni thread.
Quindi, ecco il trucco: non è possibile avere due NSPersistentStoreCoordinator
s che fornisce l'accesso allo stesso negozio. Ma il libro di Core Data di Marcus Zarra afferma che NSPersistentStoreCoordinator
è thread-safe e serializzerà le richieste di I/O (pp. 157).
Qualcuno può chiarirlo? È possibile avere un secondo contesto dell'oggetto gestito in esecuzione su un thread separato che condivide lo stesso NSPersistentStoreCoordinator
con il thread principale? O, più sinteticamente, è NSPersistentStoreCoordinator
thread-safe?
FYI è possibile avere più PSC che aprono lo stesso file di archivio. –