不使用-lock方法删除Core Data堆栈

时间:2015-04-09 14:09:39

标签: swift core-data ios8 nsmanagedobjectcontext

在iOS 8中不推荐使用Core Data ManagedObjectContext -lock方法。但是,直到今天,我已经能够编写以下代码,以便在没有任何警告的情况下删除我的Core Data Stack:

// 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()
  在iOS 8.0版中不推荐使用

'lock()':使用队列样式上下文   和-performBlockAndWait:而不是

如何在不使用-lock方法的情况下重写以前的代码?我只是看不出-performBlockAndWait:如何取代它。

2 个答案:

答案 0 :(得分:1)

我不经常需要删除这样的持久性商店,但原则上我不明白为什么performBlockAndWait:无法运作。所有该方法都确保块中的代码在上下文的串行队列上运行,无论是私有队列还是主队列。它应该与调用lock一样有效, if 确保使用块式调用无处不在可以访问上下文。

答案 1 :(得分:0)

您应该锁定持久性存储协调器本身,而不是上下文。