2009-11-09 3 views
1

В настоящее время я работаю над игрой для iphone, где изображения загружаются из Интернета, а затем сохраняются в локальной базе данных, поэтому их не нужно загружать снова. Это всегда срабатывало нормально. Недавно я создал новый дистрибутив adhoc для группы тестирования (первый раз, когда я создал дистрибутив с использованием SDK 3.1.2), и теперь все, кто обновил свой iphone до 3.1.2, больше не могут писать в базу данных и таким образом, приходится загружать изображения каждый раз из Интернета. Люди с версией для iphone ниже 3.1.2 не имеют проблем, а версии предыдущих версий (с SDK 3.1 или ниже) не имеют проблем с iphone с 3.1.2. Обновления, которые я сделал в игре, не имели никакого отношения к datamanager в игре. Еще странно, что я не нахожу никаких сообщений в консоли, используя следующий код:Проблема с разрешением на запись на sqlite3 на 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 У меня нет разрешения на запись данных в базу данных?

+0

Какая ошибка вы видите? Где ваша база данных? Какие результаты вы получаете от sqlite3_bind_text и sqlite3_bind_blob? Я могу заверить вас, что мы все еще пишем blobs в нашу базу данных с помощью 3.1.2, и наш SQL намного сложнее, чем это. Я сомневаюсь, что вы нашли ошибку в SQLite. –

+0

Я не вижу никакой ошибки, единственное, что я замечаю, это то, что blob не записывается в базу данных. База данных находится в каталоге документов. Странно, что это происходит только в AdHoc Distribution, если я создаю приложение непосредственно на телефоне, этого не произойдет. –

ответ

0

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

******** UPDATE: частичное решение было достигнуто путем изменения ссылки, чтобы включить полный путь на устройстве. Google "checkAndCreateDatabase" метод для кода. У меня все еще есть сбои в инструкции на sqlite на устройстве в ОС 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);} 
Смежные вопросы