0

さて、エミュレータでの開発が終了しました。テストデバイスにインストールすると、エラーが発生しました。

読み取り専用データベースを書き込もうとします

DBアクセスを制御するための設定は何ですか?展開時にこれを管理するのは難しいですか?

詳細情報...何が起こっているかはわかっていると思います...DBを探すとき、チュートリアルと同じパスではありません。私がやりたいのは、プロジェクトの「コンテンツ」のルートフォルダの下にあるグループを作成することです。このグループの定義済みパスの下にJustADatabase.sqliteファイルを追加しました。すべてのパスが書き込み可能であるとは限らないため、ユーザーが作成したパスはインストール時に書き込み可能ではないと推測しています。

ビルド/コピースクリプトを使用してファイルを正しい場所にインストールする方法があると思います。

これが問題だと思いますか?修正のスクリプトを作成する方法、またはファイルをプロジェクトの正しい場所に配置して正しくコピーする方法を知っていますか?以下は、「tutorial」パスがコメントアウトされたsqlite-openコマンドに至るまでのコードです。これは読み取りで機能し、書き込みアクセス拒否の原因となる可能性があります。

- (void)initializeDatabase {

    // ??? NSArray  *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    // ??? NSString *documentsDirectory = [paths objectAtIndex:0];
    // ??? NSString *pathTutorial = [documentsDirectory stringByAppendingPathComponent: @"JustaDatabase.sqlite"];
    NSString *path = [[NSBundle mainBundle] pathForResource:@"JustaDatabase" ofType:@"sqlite"]; 

    if( sqlite3_open([path UTF8String], &database) == SQLITE_OK ) {
        NSLog(@"%s: opened database %@", __FUNCTION__, path);
    } else {
        NSAssert1(0,@"Failed to open database: '%s'.", sqlite3_errmsg(database));
    }
}
4

1 に答える 1

1

sqlite3のアクセス許可は単なるファイルのアクセス許可です。

デバイスのバンドルディレクトリにあるファイルに書き込むことはできないため、dbファイルをドキュメントディレクトリにコピーする必要があります。

于 2010-04-19T03:26:47.303 に答える