1

sqlite データベースを作成しました。

この sqlite ファイルをアプリケーションに追加しますが、シミュレーターでアプリを実行し、ドキュメント ディレクトリで sqlite ファイルのパスを確認し、その時点でドキュメント ディレクトリのパスで sqlite ファイルを開くと、作成したテーブルが表示されません。

ローカル コピーでは、プロジェクト フォルダーにもテーブルが表示されます。テーブルは表示されますが、シミュレーターのパスではテーブルが表示されません。

私のコンソールでは、エラーが表示されます:

Sqlite の準備に失敗しました: そのようなテーブルはありません

4

4 に答える 4

2

以下の私の回答は、データベースが適切にフォーマットされ、機能していることを前提としています。コマンドラインから簡単にテストできます。私自身のアプリ、すべてのタブ バー コントローラー アプリでは、db アクセス コードをアプリ デリゲートに配置します。アプリ デリゲートの 2 つのメソッドは次のとおりです。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions (NSDictionary *)launchOptions {
    [self createEditableCopyOfDatabaseIfNeeded];
    [self.window setRootViewController:rootController]; 
    [window makeKeyAndVisible];
    return YES;
}

また:

- (void)createEditableCopyOfDatabaseIfNeeded {

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDir = [paths objectAtIndex:0];

    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *error;
    NSString *dbPath =[documentsDir stringByAppendingPathComponent:@"dbName.sqlite"];
    BOOL success = [fileManager fileExistsAtPath:dbPath];
    if(!success)
    {
        NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"dbName.sqlite"];
        success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];

        if (!success)
            NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
    }
}
于 2012-10-05T13:05:55.733 に答える
2

すべてを試してもまだこのエラーが発生する場合.. iOS シミュレーターをリセットしようとしても. アプリを iOS シミュレーターにインストールしてから、手動でアンインストールして ([ホーム] を選択し、アプリのアイコンを長押しして削除します)、シミュレーターをリセットしてみてください。

理由はわかりませんが、他のことはすべて試し、何時間も頭を壁にぶつけました。その後、これは機能しました。

于 2013-05-18T05:09:36.693 に答える
0

sqliteファイルをxcodeプロジェクトに入れて、次のように見つけることができます。

NSString *pathToSQL = [[NSBundle mainBundle]
pathForResource:@"sqlname" ofType:@"sql"];
于 2012-10-05T13:03:28.807 に答える