Swift - 如何检查现有核心数据存储 iOS

Swift - how to check for existing Core Data Store iOS

我正在开发一个应用程序,它应该有一个起始 window,它将有一个介绍,如果没有找到现有的核心数据存储,然后是一个 "Get Started" 按钮,然后如果商店存在 - 它应该有一个 "Continue Session" 和 "Start Over" 按钮。唯一的问题是我认为我检查商店的代码没有工作——我把它放在 ViewController 的 viewDidLoad 函数中:

override func viewDidLoad() {
    super.viewDidLoad()
    let defaultStorePath = NSBundle.mainBundle().pathForResource("LearnUSStateCapitals", ofType: "sqlite")
    let fileManager = NSFileManager.defaultManager()
    if defaultStorePath == nil {
        println("can't find store")
        generateSCA()
    } else {
        println("store found...I think")
        continueButton.hidden = false
    }

所以我得到的只是 "can't find store" - 即使在 运行 应用几次之后。我导航到 \Library\Developer\CoreSimulator\Devices\blahblah\data\Containers\Data\Application\blahblah\Documents 并确实看到了我的 "LearnUSStateCapitals.sqlite" 文件,这是我第一次 运行 应用程序时创建的...

我使用 if defaultStorePath == nil 的原因是因为当我尝试 if fileManager.fileExistsAtPath(defaultStorePath!) 我得到 unexpectedly found nil while unwrapping an Optional value - 为什么这个 nil 可能是真正的问题...感谢您的帮助

您可以看到的文件位于Application Documents 目录中,与主包不同。您可以通过以下方式为应用程序文档目录获取 URL:

let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
let appDocsURL : NSURL = urls[urls.count - 1] as NSURL
let defaultStoreURL = appDocsURL.URLByAppendingPathComponent("LearnUSStateCapitals.sqlite")

然后使用:

if !fileManager.fileExistsAtPath(defaultStoreURL.path!) {
    println("can't find store")
    generateSCA()
} else {
    println("store found...I think")
    continueButton.hidden = false
}