2016-11-14 51 views
1

重新创建它,当我推出了全新的升级,以我的应用程序实现新的核心数据实体,我的应用程序会崩溃。删除核心数据的数据库,并更新

如何删除整个核心数据的数据库,并重新创建它?我不照顾什么在那里,因为数据是在应用程序加载时,经常更新的反正。它主要用于高速缓存,或者直到它可以与服务器同步。

+0

您不必删除整个核心数据的数据库。只需使用核心数据'Migration'来解决这个问题。 – Poles

+0

这可以帮助http://jamesonquave.com/blog/core-data-migrations-swift-tutorial/ – Poles

+0

@Poles迁移是一个容易出错的过程,很多应用程序简单地想要删除表并重新开始。例如,我在Android中就是这么做的。 –

回答

0

初始化之前您NSPersistentContainer

  • 删除您Model.sqlite持久性存储文件
  • 删除在同一目录中的所有其他文件,包含.sqlite的扩展名(Model.sqlite-shmModel.sqlite-wal)。
0

这是什么,当我实例化我CoreDataController我使用:

private override init() { 
    // This resource is the same name as your xcdatamodeld contained in your project. 

    guard let modelURL = NSBundle(forClass:CoreDataController.classForCoder()).URLForResource("YOURAPP", withExtension:"momd") else { 
     fatalError("Error loading model from bundle") 
    } 
    // The managed object model for the application. It is a fatal error for the application not to be able to find and load its model. 
    guard let mom = NSManagedObjectModel(contentsOfURL: modelURL) else { 
     fatalError("Error initializing mom from: \(modelURL)") 
    } 
    let psc = NSPersistentStoreCoordinator(managedObjectModel: mom) 
    self.managedObjectContext = NSManagedObjectContext(concurrencyType: .MainQueueConcurrencyType) 
    self.managedObjectContext.persistentStoreCoordinator = psc 
    let storeURL = CoreDataController.storeUrl 
    do { 
     try psc.addPersistentStoreWithType(CoreDataController.storeType(), configuration: nil, URL: storeURL, options: nil) 
    } catch { //Exception means your database leads to error, so drop it, and create a new one 
     do { 
      try NSFileManager.defaultManager().removeItemAtURL(storeURL) 
      try psc.addPersistentStoreWithType(CoreDataController.storeType(), configuration: nil, URL: storeURL, options: nil)} 
     catch { 
      fatalError("Error migrating store: \(error)") 
     } 

    } 
    super.init() 
} 
+0

我可以在我的AppDelegate中调用此地址吗?或者哪里最好打电话给它?我没有专用的CoreDataController。谢谢。我加了一个迁移暂时的,但我想我会需要这个未来。 – toast

+0

Personnaly我有一个独立的类叫CoreDataController(和它的一个单例)。所有与CoreData有关的东西都进去了。这比将所有内容放在你的应用程序中更好。Delegate – CZ54

+0

但是我不必在应用程序完全加载之前调用它,否则我会得到关于不兼容db的错误?这就是为什么我想知道我是否可以在我的AppDeleage中调用这个。 – toast