Tôi đang cố gắng bao gồm một cơ sở dữ liệu SQLite được điền sẵn (với trình bao bọc FMDB) trong một bản dựng cho iPhone vật lý của tôi. Tuy nhiên, cơ sở dữ liệu được điền sẵn không được bao gồm trong bản dựng cho thiết bị vật lý.Swift - Cơ sở dữ liệu SQLite được điền sẵn không có trên thiết bị
Lưu ý rằng nó hoạt động tốt trong IOS Simulator, nhưng chỉ cho một thiết bị mô phỏng.
Tôi đã bao gồm cơ sở dữ liệu trong giai đoạn xây dựng> Sao chép tài nguyên đi kèm và liên kết libsqlite3.dylib dưới liên kết nhị phân với thư viện.
Tôi cần thêm mã Swift nào để có được cơ sở dữ liệu được bao gồm trong bản dựng cho thiết bị thực?
Code:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var checkButton: UIButton!
@IBOutlet weak var tests_scroller: UITextView!
var databasePath = NSString()
override func viewDidLoad() {
super.viewDidLoad()
checkButton.setTitle("\u{2610}", forState: .Normal)
checkButton.setTitle("\u{2611}", forState: .Selected)
let filemgr = NSFileManager.defaultManager()
let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
let docsDir = dirPaths[0] as! String
databasePath = docsDir.stringByAppendingPathComponent("vmd_db.db")
let myDatabase = FMDatabase(path: databasePath as String)
if myDatabase.open(){
var arrayData:[String] = []
let query_lab_test = "SELECT lab_test FROM lab_test ORDER BY lab_test ASC"
let results_lab_test:FMResultSet? = myDatabase.executeQuery(query_lab_test, withArgumentsInArray: nil)
while results_lab_test?.next() == true {
if let resultString = results_lab_test?.stringForColumn("lab_test"){
arrayData.append(resultString)
}
}
var multiLineString = join("\n", arrayData)
tests_scroller.text = multiLineString
myDatabase.close()
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
CẬP NHẬT - Working Swift 2 mã trong XCode 7 - Pre-dân cư cơ sở dữ liệu SQLite sử dụng FMDB wrapper sao chép vào thiết bị OK vật lý:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var tests_scroller: UITextView!
var databasePath = NSString()
override func viewDidLoad() {
super.viewDidLoad()
let sourcePath = NSBundle.mainBundle().pathForResource("vmd_db", ofType: "db")
let documentDirectoryPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first as String!
let destinationPath = (documentDirectoryPath as NSString).stringByAppendingPathComponent("vmd_db.db")
do {
try NSFileManager().copyItemAtPath(sourcePath!, toPath: destinationPath)
} catch _ {
}
//read it
let myDatabase = FMDatabase(path: destinationPath as String)
if myDatabase.open(){
var arrayData:[String] = []
let query_lab_test = "SELECT lab_test FROM lab_test ORDER BY lab_test ASC"
let results_lab_test:FMResultSet? = myDatabase.executeQuery(query_lab_test, withArgumentsInArray: nil)
while results_lab_test?.next() == true {
if let resultString = results_lab_test?.stringForColumn("lab_test"){
arrayData.append(resultString)
}
}
let multiLineString = arrayData.joinWithSeparator("\n")
tests_scroller.text = multiLineString
myDatabase.close()
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
Tại sao câu hỏi của tôi bị bỏ phiếu ???? – IlludiumPu36
xuống cử tri để lại không có bình luận vì vậy tôi upvoted để bỏ phiếu. –