0

私はiPhoneプログラミングに不慣れです。エラーが発生し続け、SQLiteの権限を変更する方法がわかりません。

更新中にエラーが発生しました。読み取り専用データベースを書き込もうとします

以下は私のコーディングです

NSString * filePath = [[NSBundle mainBundle] pathForResource:@ "card" ofType:@ "sqlite"];
sqlite3_stmt*ステートメント;

if(sqlite3_open([filePath UTF8String]、&db)== SQLITE_OK)
{
  const char * query_stmt = "UPDATE card SET isActivate =?";
  if(sqlite3_prepare_v2(db、query_stmt、-1、&statement、NULL)!= SQLITE_OK)
     {
         NSAssert1(0、@"更新ステートメントの作成中にエラーが発生しました。'%s'"、sqlite3_errmsg(db));
     }
}


sqlite3_bind_int(statement、1、1);
if(SQLITE_DONE!= sqlite3_step(statement))
   {
      NSLog(@ "更新中のエラー。%s"、sqlite3_errmsg(db));
    }

sqlite3_finalize(ステートメント);
sqlite3_close(db);

誰かが私を助けてくれることを願っています。これは本当に私を苛立たせます。

4

1 に答える 1

1

正しく使用するには、SQL ファイルをキャッシュ ディレクトリにコピーする必要があります。
これが私のコードの一部です:

NSString *sqlFile = @"database.sql";
NSArray *cachePath= NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cacheDir = [cachePathobjectAtIndex:0];
databasePath = [cacheDirstringByAppendingPathComponent:sqlFile];

NSFileManager *fileManager = [NSFileManager defaultManager];
// Copy the database sql file from the resourcepath to the documentpath
if (![fileManager fileExistsAtPath:databasePath]) {
    NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:sqlFile];
    NSError *error;
    [fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:&error];
    if (error != nil) {
        NSLog(@"[Database:Error] %@", error);
    }
}
于 2012-07-31T09:06:19.787 に答える