Xcode:在removeItemAtPath之后重置CoreData

时间:2015-11-10 22:27:53

标签: swift core-data

这可能不是最好的方法,但它有点工作。

我的应用程序的新版本的架构是如此不同,我认为使用迁移是不合理的。所以我决定创建一个错误屏幕,通知用户他们将丢失他们的数据。这有效,数据被删除但我必须重新启动应用程序以查看空数据库。如果不重新启动应用程序,最好的方法是什么?

以下是代码:

@IBAction func doneAction(sender: UIButton) {

    deleteAppData ()

    createAppData()

    let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let vc : UIViewController = storyboard.instantiateViewControllerWithIdentifier("NCStartMenuTV")
    self.presentViewController(vc, animated: true, completion: nil)
}


override func viewDidLoad() {
    super.viewDidLoad()
 }

override func viewDidAppear(animated: Bool) {

    myTextView.text = "Your app will lose data if you proceed. Please accept our apologies but the new features in this version makes this necessary."
}

使用代码删除数据并创建新数据。

class ViewController: UIViewController {

  @IBOutlet weak var scrollView: UIScrollView!

  override func viewDidLayoutSubviews() {
    print(scrollView.frame)
  }
}

1 个答案:

答案 0 :(得分:0)

  

所以我决定创建一个错误屏幕,通知用户他们将丢失数据。

庵。哇。你的穷人用户。请重新考虑。丢失用户数据是应用程序可以做的最糟糕的事情之一。故意破坏用户数据会使情况更糟。

  

如果不重新启动应用程序,最好的方法是什么?

在使用Core Data执行任何操作之前删除旧数据。那么你没有任何理由重新启动。

let newDir = docsDir.stringByAppendingPathComponent("CREWData.sqlite")

do {
    try filemgr.removeItemAtPath(newDir)
}

此代码几乎可以保证失败。 Core Data使用单独的日志文件,其名称与主持久性存储相同,但添加了-wal-shm。如果你不删除它们,你的数据很可能会从死里复活。