Swift - 如何检查现有的 Core Data Store iOS
Posted
技术标签:
【中文标题】Swift - 如何检查现有的 Core Data Store iOS【英文标题】:Swift - how to check for existing Core Data Store iOS 【发布时间】:2015-01-27 20:48:59 【问题描述】:我正在开发一个应用程序,它应该有一个启动窗口,如果没有找到现有的核心数据存储,则应该有一个启动窗口,然后是“开始”按钮,如果存在存储 - 它应该有“继续会话”和“重新开始”按钮。唯一的问题是,我认为我用于检查商店的代码不起作用 - 我将其放入 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
所以我得到的只是“找不到商店”——即使在运行了几次应用程序之后也是如此。我已经导航到\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 可能是真正的问题...感谢您的帮助
【问题讨论】:
【参考方案1】:您可以看到的文件位于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
【讨论】:
太棒了 - 这很有效 - 非常感谢,但这是否意味着我的商店在错误的地方 - 我没有使用基于“文档”的应用程序......无论如何也不是故意的。 您的数据库位于正确的位置 - Documents 目录旨在用于最松散意义上的应用程序“文档” - 几乎所有应用程序数据都应该放在那里(或它的子目录)。事实上,主包是只读的。以上是关于Swift - 如何检查现有的 Core Data Store iOS的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift Core Data 项目中实现 UISearchController
将 Core Data For Storage 用于现有的 Iphone 项目?
将 ResKit 集成到现有的 Core Data 应用程序中
在Core Data中,如何在swift 4中执行`if exists update else insert`? [复制]