2017-07-02 15 views
1

私は最近iOSプロジェクトを開始しました。アップデートがあるとインターネットからダウンロードされるスタンドアロンデータベースで作業する必要があります。これは私の最初のiOSプロジェクトなので、ダウンロードの仕組みを設計する前に機能を稼働させようとしています。iOSで既存のSQLiteデータベースを使用するには?

私はSQLiteラッパーSWLite.swifthttps://github.com/stephencelis/SQLite.swift)を選択しました。私のクエリとテーブルビューをロールインできる状態にしました。しかし、私はDBに接続することはできません。私はまったく成功していないので、他のすべての質問/答えをここで試してみました。例えば

(Iはnil戻ったよう - おそらくパスが配置されなかったために)、IはAssets.xcassetsにSQLiteデータベースを滴下しlet path = Bundle.main.path(forResource: "myDb", ofType: "db")!を試み、アプリがクラッシュ。同様に私は、Macにフォルダを作成し、そのファイルをドロップし、.bundleをフォルダ名に追加して、資産にドロップするなど、他の人が提案したことを試してみた。もう一度、nil

誰かにアドバイスできますか?私はApple Docsを見て、私が探していたものを実際に見つけることができませんでした。もう一度、これは初めてのことです。間違っているかもしれません。

答えて

1

携帯電話のバンドルsqliteファイルから直接読み取ることはできません。まずDocumentsフォルダにコピーしてそこから読み始めなければなりません。これは一度だけ行う必要があります。あなたは

let doumentDirectoryPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString 
let dbPath = doumentDirectoryPath.appendingPathComponent("DBName.sqlite") 
+0

はドキュメントフォルダの下に、あなたのSQLiteのファイルの文字列形式のパスです。 SQLiteライブラリを使用してそこからファイルを読み込むことができます。 –

+0

'dbPath'はどのようなものになるのでしょうか?アプリケーションは、 '致命的なエラー:予期せぬことにnilが選択値をアンラッピングしている間に 'というtry文でクラッシュします。コードは、あなたが提案したものを組み合わせたものです: 'try fileManager.copyItem(atPath:path !, toPath:" myDb.sqlite ")' – The48Percent

+0

@ The48Percent 2番目の例では 'dbPath'を使います。 –

-1

ファーストをオフに使用することができます接続するために

let path = Bundle.main.path(forResource: "DBName", ofType: "sqlite") 
do{ 
    try fileManger.copyItem(atPath: path!, toPath: dbPath) 
}catch let error as NSError { 
    print("error occurred, here are the details:\n \(error)") 
} 

次に、それを移動するには、あなたのドキュメントフォルダ以外にどこか他のあなたのデシベルを持つようにしたいことはありません。ここで

はSQLite.Swiftを行うためのプロセスです: -

// this is the path where your DB should be 

let path = NSSearchPathForDirectoriesInDomains(
.documentDirectory, .userDomainMask, true 
).first! 


// this is how you create a DB with a table:- 

    do { 
       let db_name = "my_db" 
       let db = try Connection("\(path)" + "/" + db_name! + ".sqlite3") 
       try db.key("12345") // if db is encrypted with SQLCipher 

       do { 
        try db.run(mastertableName.create(ifNotExists: true) { t in 

         t.column(database_name) 
         t.column(email, unique: true) 
         t.column(date_created) 
         t.column(device_info) 
        }) 
       } 
       catch { 

        print("Creating Master Table Failed!") 
       } 

それが存在しない場合だけで接続を行うことによって、それは、あなたのためのDBを作成します! DBの読み込み

: - The48Percent DBPATH @

do { 
     let db_name = "my_db" 
     let db = try Connection("\(path)" + "/" + db_name! + ".sqlite3") 
     try db.key("12345") 

    // db is now open... do your stuff.. 
} 

catch { 
print("opening the db failed!") 
} 
関連する問題