不使用 -lock 方法删除核心数据堆栈
Delete a Core Data stack without using -lock method
核心数据 ManagedObjectContext -lock
方法在 iOS 8 中被弃用。但是,直到今天,我已经能够编写以下代码来删除我的核心数据堆栈,而无需任何警告:
// Delete Core Data stack
if let PSC = managedObjectContext.persistentStoreCoordinator {
if let PS = PSC.persistentStores.first as? NSPersistentStore {
let storeURL = PSC.URLForPersistentStore(PS)
managedObjectContext.lock()
managedObjectContext.reset()
var error: NSError?
if !PSC.removePersistentStore(PS, error: &error) {
println("Unresolved error \(error), \(error!.userInfo)")
abort()
}
if !NSFileManager.defaultManager().removeItemAtURL(storeURL, error: &error) {
println("Unresolved error \(error), \(error!.userInfo)")
abort()
}
if PSC.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: storeURL, options: nil, error: &error) == nil {
println("Unresolved error \(error), \(error!.userInfo)")
abort()
}
managedObjectContext.unlock()
}
}
使用 Xcode 6.3 和 Swift 1.2,我现在收到以下几行警告:
self.managedObjectContext.lock()
self.managedObjectContext.unlock()
'lock()' was deprecated in iOS version 8.0: Use a queue style context
and -performBlockAndWait: instead
如何在不使用-lock
方法的情况下重写之前的代码?我只是看不出 -performBlockAndWait:
怎么能取代它。
您应该锁定持久存储协调器本身,而不是上下文。
我并不经常需要像这样删除持久存储,但原则上我不明白为什么 performBlockAndWait:
不起作用。该方法所做的只是确保块中的代码在上下文的串行队列上运行,无论是专用队列还是主队列。它应该和以前调用 lock
一样有效, 如果 你确保使用块式调用 everywhere您可能会访问上下文。
核心数据 ManagedObjectContext -lock
方法在 iOS 8 中被弃用。但是,直到今天,我已经能够编写以下代码来删除我的核心数据堆栈,而无需任何警告:
// Delete Core Data stack
if let PSC = managedObjectContext.persistentStoreCoordinator {
if let PS = PSC.persistentStores.first as? NSPersistentStore {
let storeURL = PSC.URLForPersistentStore(PS)
managedObjectContext.lock()
managedObjectContext.reset()
var error: NSError?
if !PSC.removePersistentStore(PS, error: &error) {
println("Unresolved error \(error), \(error!.userInfo)")
abort()
}
if !NSFileManager.defaultManager().removeItemAtURL(storeURL, error: &error) {
println("Unresolved error \(error), \(error!.userInfo)")
abort()
}
if PSC.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: storeURL, options: nil, error: &error) == nil {
println("Unresolved error \(error), \(error!.userInfo)")
abort()
}
managedObjectContext.unlock()
}
}
使用 Xcode 6.3 和 Swift 1.2,我现在收到以下几行警告:
self.managedObjectContext.lock()
self.managedObjectContext.unlock()
'lock()' was deprecated in iOS version 8.0: Use a queue style context and -performBlockAndWait: instead
如何在不使用-lock
方法的情况下重写之前的代码?我只是看不出 -performBlockAndWait:
怎么能取代它。
您应该锁定持久存储协调器本身,而不是上下文。
我并不经常需要像这样删除持久存储,但原则上我不明白为什么 performBlockAndWait:
不起作用。该方法所做的只是确保块中的代码在上下文的串行队列上运行,无论是专用队列还是主队列。它应该和以前调用 lock
一样有效, 如果 你确保使用块式调用 everywhere您可能会访问上下文。