物理的なiPhoneにビルド済みのSQLiteデータベース(FMDBラッパー付き)を含めることを試みています。ただし、事前設定されたデータベースは、物理デバイスへのビルドに含まれていません。Swift - SQLiteデータベースがデバイスに組み込まれていない
IOSシミュレータでは正常に動作しますが、1台のシミュレータデバイスでのみ動作することに注意してください。
ビルドフェーズ>バンドルされたリソースをコピーし、ライブラリとリンクバイナリのlibsqlite3.dylibをリンクしました。
物理デバイスにビルドに含まれるデータベースを取得するには、どのSwiftコードを追加する必要がありますか?
コード:
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.
}
}
をUPDATE - XCodeの7におけるワーキングスイフト2コード - 物理デバイスOKにコピーFMDBラッパーを使用して、事前にSQLiteデータベース:
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.
}
}
私の質問はなぜ投票されましたか? – IlludiumPu36
ダウン投票者はコメントを残さなかったので、私は反対投票にアップしました。 –