我知道有很多相关的帖子,但我注意到他们都没有解释这样做的方式,大多数人说要查看文档,我看起来已经看了但似乎缺乏有关将预先填充的数据库带到Swift的信息
我有一个旧的数据库.db,超过60k行三列,我想用FMDB包装器带到我的swift SQLite应用程序,该应用程序在iPhone中工作,我试图将contacts.db拖到应用程序但我无法访问它.在设备中运行时,应用程序始终启动新数据库.
我将数据库复制到支持文件文件夹,并尝试在app文件夹中,无法访问
有没有人这样做并愿意告诉我该怎么做?
总之,我正在寻找的是将我的contacts.db插入应用程序(包),以便我可以访问设备而不是在模拟器中.我不需要在设备中添加删除或编辑contact.db,数据库加载了所需的所有信息,用户只能进行搜索并能够显示结果.
class ViewController: UIViewController {
@IBOutlet weak var name: UITextField!
@IBOutlet weak var address: UITextField!
var databasePath = NSString()
override func viewDidLoad() {
super.viewDidLoad()
if let resourceUrl = NSBundle.mainBundle().URLForResource("contacts", withExtension: "db") {
if NSFileManager.defaultManager().fileExistsAtPath(resourceUrl.path!)
}
let filemgr = NSFileManager.defaultManager()
let dirPaths =
NSSearchPathForDirectoriesInDomains(.DocumentDirectory,
.UserDomainMask, true)
let docsDir = dirPaths[0] as! String
databasePath = docsDir.stringByAppendingPathComponent(
"contacts.db")
if !filemgr.fileExistsAtPath(databasePath as String) {
let contactDB = FMDatabase(path: databasePath as String)
if contactDB == nil {
println("Error: \(contactDB.lastErrorMessage())")
} …
Run Code Online (Sandbox Code Playgroud) 我从文档中得到了这个代码,我找不到文件的路径,我需要将"contacts.db"文件从Supporting Files文件夹复制到设备中不在模拟器中的应用程序以供离线使用.
func copyItemAtPath(_ srcPath: String,
toPath dstPath: String,
error error: NSErrorPointer) -> Bool
Run Code Online (Sandbox Code Playgroud)
srcPath =要移动的文件或目录的路径.此参数不得为零.
dstPath =放置srcPath副本的路径.此路径必须包含新位置中的文件或目录的名称.此参数不得为零.
error = On输入,指向错误对象的指针.如果发生错误,则将此指针设置为包含错误信息的实际错误对象.如果您不想要错误信息,可以为此参数指定nil.
任何帮助都非常感谢.:)
我只是将Data.csv文件拖到导航器面板中的应用程序文件夹,我试图将文件的正确路径设置到应用程序中.
下面我用模拟器和完美的作品,但在我改变代码的第二块设备上运行的代码,然后我得到这个错误:
数据[399:157757] CFURLCopyResourcePropertyForKey失败,因为它是通过它没有一个URL scheme
错误Domain = NSCocoaErrorDomain Code = 256"无法打开文件"Documents"."
的UserInfo = {NSURL =的/ var /移动/容器/数据/应用/ C7756542-6922-4C6F-A98E-C6F407B2063E /文件}
//code to show the path in the simulator:
guard let remoteURL = NSURL(string: "/Users/mbp/Library/Developer/CoreSimulator/Devices/7F25FC7C-F2B2-464E-85B4-A2B96DB83F17/data/Containers/Bundle/Application/F285940D-7776-4EE2-83A1-D54DD3411E0E/Data.app/Data.csv") else {
return
}
Run Code Online (Sandbox Code Playgroud)
阻止在设备中运行应用:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let sourcePath = NSBundle.mainBundle().pathForResource(“Data”, ofType: "csv")
print(sourcePath)
let filename = "Data.csv"
let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]
let destinationPath = documentsPath + "/" + filename
do {
try NSFileManager().copyItemAtPath(sourcePath!, toPath: destinationPath)
} …
Run Code Online (Sandbox Code Playgroud)