如何使用 swift 3 xcode 8 在核心数据中预加载数据库
Posted
技术标签:
【中文标题】如何使用 swift 3 xcode 8 在核心数据中预加载数据库【英文标题】:How to pre load database in core data using swift 3 xcode 8 【发布时间】:2016-11-23 09:58:10 【问题描述】:我有一个包含数据的数据库,我想在应用程序中预加载它。在 swift 3 之前它可以工作,我已经按照本教程进行操作:http://www.appcoda.com/core-data-preload-sqlite-database/ 但是如何为 swift 3 加载相同的数据库?介绍了NSPersistentContainer
,如何加载项目中的 .sqlite 文件?
【问题讨论】:
找到解决办法了吗? @LokeshChowdary yes.check 我已经添加了我的答案,它工作得很好。 【参考方案1】:实际上创建数据库的默认路径在 swift 3 中已更改。所以现在代码看起来像:
func preloadDBData()
let sqlitePath = Bundle.main.path(forResource: "MyDB", ofType: "sqlite")
let sqlitePath_shm = Bundle.main.path(forResource: "MyDB", ofType: "sqlite-shm")
let sqlitePath_wal = Bundle.main.path(forResource: "MyDB", ofType: "sqlite-wal")
let URL1 = URL(fileURLWithPath: sqlitePath!)
let URL2 = URL(fileURLWithPath: sqlitePath_shm!)
let URL3 = URL(fileURLWithPath: sqlitePath_wal!)
let URL4 = URL(fileURLWithPath: NSPersistentContainer.defaultDirectoryURL().relativePath + "/MyDB.sqlite")
let URL5 = URL(fileURLWithPath: NSPersistentContainer.defaultDirectoryURL().relativePath + "/MyDB.sqlite-shm")
let URL6 = URL(fileURLWithPath: NSPersistentContainer.defaultDirectoryURL().relativePath + "/MyDB.sqlite-wal")
if !FileManager.default.fileExists(atPath: NSPersistentContainer.defaultDirectoryURL().relativePath + "/MyDB.sqlite")
// Copy 3 files
do
try FileManager.default.copyItem(at: URL1, to: URL4)
try FileManager.default.copyItem(at: URL2, to: URL5)
try FileManager.default.copyItem(at: URL3, to: URL6)
print("=======================")
print("FILES COPIED")
print("=======================")
catch
print("=======================")
print("ERROR IN COPY OPERATION")
print("=======================")
else
print("=======================")
print("FILES EXIST")
print("=======================")
现在您可以从 AppDelegate 的 didFinishLaunchWithOptions
方法中调用此方法,这将预加载我们已放入应用程序的数据库。
【讨论】:
Pooja:你为 ios 9.0 的支持做了上面的代码吗? @pooja Shah 您是否为 ios 9.0 完成了上述代码?如果是这样,请帮助我。 @LokeshChowdary , Pooja:你在同一个项目中使用过 csv (appcoda.com/core-data-preload-sqlite-database) 吗?我需要从 csv 中获取数据并显示在表格视图中。 @pkc456 您可以使用工具名称直接将 csv 文件转换为 db:sqlite 或 mesa sql,然后在应用程序中使用该数据库。 @PoojaShah :嘿,我的应用程序崩溃了,因为在我的应用程序包中我没有全部 3 个文件,我从哪里提取 3 个文件。实际上我遵循appcoda.com/core-data-preload-sqlite-database 教程并打印文档路径但在那里没有找到任何单个文件..请帮助我,提前谢谢..!以上是关于如何使用 swift 3 xcode 8 在核心数据中预加载数据库的主要内容,如果未能解决你的问题,请参考以下文章
我如何在 XCODE 8、Swift 3 中使用 UIAutomation
如何使用 Alamofire 在 Xcode 8 Swift 3.0 中获取特定的 JSON?
如何更改xcode 8.3.3(swift3)的语言设置[重复]
如何在 Xcode 8 和 iOS 10 中使用 AFNetworking 类和 Swift 3 上传图像