cocoa - NSManagedObjectContext(): `init()` ha quedado obsoleto en iOS 9.0: use-initWithConcurrencyType
core-data (2)
En esencia, siempre tendrá al menos 1 contexto con NSMainQueueConcurrencyType
y muchos contextos con NSPrivateQueueConcurrencyType
. NSPrivateQueueConcurrencyType
se usa normalmente para guardar o traer cosas a los datos centrales en segundo plano (como si se tratara de sincronizar registros con un servicio web).
El NSMainQueueConcurrencyType
crea un contexto asociado a la cola principal que es perfecto para usar con NSFetchedResultsController
.
La pila de datos básicos predeterminada utiliza un único contexto con NSMainQueueConcurrencyType
, pero puede crear una aplicación mucho mejor aprovechando múltiples NSPrivateQueueConcurrencyType
para realizar cualquier trabajo que no afecte a la UI.
Estaba trabajando en Core Data Stack en Swift - Demystified pero cuando llegué a la línea
self.context = NSManagedObjectContext()
Recibí la advertencia
`init()` was deprecated in iOS 9.0: Use -initWithConcurrencyType: instead
Veo que puedo hacer uno de los siguientes para self.context =
NSManagedObjectContext(concurrencyType: NSManagedObjectContextConcurrencyType.ConfinementConcurrencyType)
NSManagedObjectContext(concurrencyType: NSManagedObjectContextConcurrencyType.MainQueueConcurrencyType)
NSManagedObjectContext(concurrencyType: NSManagedObjectContextConcurrencyType.PrivateQueueConcurrencyType)
pero dado que ConfinementConcurrencyType
también está en desuso ahora eso me deja MainQueueConcurrencyType
y PrivateQueueConcurrencyType
. ¿Cuál es la diferencia entre estos dos y cómo debo elegir cuál usar? Leí esta documentación , pero realmente no entendí.
Reemplace estas dos funciones con la siguiente:
lazy var managedObjectContext: NSManagedObjectContext = {
// Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.) This property is optional since there are legitimate error conditions that could cause the creation of the context to fail.
let coordinator = self.persistentStoreCoordinator
var managedObjectContext = NSManagedObjectContext(concurrencyType: .MainQueueConcurrencyType)
managedObjectContext.persistentStoreCoordinator = coordinator
return managedObjectContext
}()
// MARK: - Core Data Saving support
func saveContext () {
if managedObjectContext.hasChanges {
do {
try managedObjectContext.save()
} catch {
// Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
let nserror = error as NSError
NSLog("Unresolved error /(nserror), /(nserror.userInfo)")
abort()
}
}
}