sqlite3 проблема с правами на запись на iphone 3.1.2 - PullRequest
1 голос
/ 09 ноября 2009

В настоящее время я работаю над игрой для iphone, где изображения загружаются из Интернета, а затем сохраняются в локальной базе данных, поэтому их не нужно загружать снова. Это всегда работало нормально. Недавно я создал новый дистрибутив adhoc для группы тестирования (впервые я создал дистрибутив с использованием SDK 3.1.2), и теперь все, кто обновил свой iphone до 3.1.2, больше не могут писать в базу данных, и поэтому приходится загружать изображения каждый раз из интернета. Люди с версией iphone ниже 3.1.2 не испытывают проблем, а предыдущие версии сборки (с SDK 3.1 или ниже) не имеют проблем на iphone с 3.1.2. Обновления, которые я сделал в игре, не имели ничего общего с менеджером данных в игре. Еще одна странная вещь - я не нахожу никаких сообщений в консоли, используя следующий код:

- (void) saveImage:(NSString *)imagePath withData:(NSData *)imageData {
    if (insert_image_statement == nil){
        const char *sql2 = "INSERT INTO image (imagePath, imageData) VALUES (?, ?);";
        if (sqlite3_prepare_v2(database, sql2, -1, &insert_image_statement, NULL) != SQLITE_OK) {
            NSLog(@"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database));
        }
    }
    sqlite3_bind_text(insert_image_statement, 1, [imagePath UTF8String], -1, NULL);
    sqlite3_bind_blob(insert_image_statement, 2, [imageData bytes], [imageData length], NULL);
    int success = sqlite3_step(insert_image_statement);
    if (success == SQLITE_ERROR){
        NSLog(@"Error: failed to insert statement with message '%s'.", sqlite3_errmsg(database));
    }
    sqlite3_reset(insert_image_statement);
}

Таким образом, sqlite3 не выдает ошибку, которая может указывать мне на решение этой проблемы. Кто-нибудь знает, почему с SDK 3.1.2 у меня, похоже, нет разрешения на запись данных в базу данных?

1 Ответ

0 голосов
/ 03 января 2010

была ли эта проблема решена? У меня такая же проблема со сборкой Device / Release в 3.1.2, где в if возникают ошибки (sqlite3_exec (...)); оператор, но сообщение об ошибке не возвращается.

******** ОБНОВЛЕНИЕ: частичное решение было достигнуто путем изменения ссылки, чтобы включить полный путь на устройстве. Google "checkAndCreateDatabase" метод для кода. У меня все еще есть ошибки в операторе sqlite prepare на устройстве в ОС 3.1.2, которого у меня не было в симуляторе. **********

-(void)initializeDatabaseFunctions {

databaseName = "RowTable.db";
returnCode = sqlite3_open(databaseName, &sqlite);

NSString *dropRows = [[NSString alloc]initWithFormat:@"DROP TABLE IF EXISTS rows;"];
if(sqlite3_exec(sqlite, [dropRows UTF8String], NULL, NULL, &errorMsg) != SQLITE_OK) {
    NSLog(@"Error DROP TABLE IF EXISTS rows: %s", errorMsg);
sqlite3_free(errorMsg);}
...