Папката с документи е празна в симулатора. Къде е моят db.sqlite?

Прочетох, че трябва да намеря своя sqlite db по този път:

~/Library/Application Support/iPhone Simulator/YOUR-IOS-VERSION/Applications/UNIQUE-KEY-FOR-YOUR-APP/Documents

Но папката е празна. Когато стартирам приложението си в симулатора, мога да направя заявка в db. Db първоначално се намира в папката с ресурси на моето приложение.

Работя с xcode 3.2.6 и OS X 10.6.8

Има ли някъде другаде, където мога да го търся?

Много благодаря. Лапо

-(void)insertError:(Frage *) f 
           answer2:(NSString *) answer2 
           answer3:(NSString *) answer3 
 {

    int resconn = sqlite3_open([pathDB UTF8String], &database);

    if (resconn == SQLITE_OK) {

        NSString * sql = @"Insert into errors (id, answer2,answer3) values (?,?,?)";
        const char * sqlStatement = [sql UTF8String];

        sqlite3_stmt * compiledStatement;

        if (sqlite3_prepare_v2(database, sqlStatement, -1 , &compiledStatement, NULL) == SQLITE_OK) {
            sqlite3_bind_text(compiledStatement, 1, [f.id UTF8String], -1 , SQLITE_TRANSIENT);
            sqlite3_bind_int(compiledStatement, 2, [answer2 intValue]);
            sqlite3_bind_int(compiledStatement, 3, [answer3 intValue]);
        } 
        if (!sqlite3_step(compiledStatement) == SQLITE_DONE) {
            //
        }   
        sqlite3_finalize(compiledStatement);

    }
    sqlite3_close(database);
}

person user1412042    schedule 23.05.2012    source източник
comment
Копирате ли db файла от вашата папка Resources в папката Documents при стартиране на вашето приложение?   -  person Mutix    schedule 23.05.2012
comment
Не, @Mutix, не го направих, тъй като смятах, че няма да е необходимо. Във всеки случай след твоето предложение го копирах. Както и да е, този db остава недокоснат и не мога да извлека записи, които съм вмъкнал. Благодаря   -  person user1412042    schedule 23.05.2012
comment
След като го копирате в папката Documents, ще трябва да използвате db, намираща се в тази папка документи, за да изпълнявате вашите sql заявки. Можете ли да публикувате някакъв код за копиране и използване на вашата db, моля, това може да ни помогне да открием проблема ви   -  person Mutix    schedule 23.05.2012
comment
Добавих някакъв код, който използвах за вмъкване на запис. Не копирах db програмно, а ръчно. Трябва ли да копирам моята база данни в папка с документи програмно? Това звучи странно, тъй като бих очаквал това да се случи по време на инсталиране в Simulator. Благодаря за помощта   -  person user1412042    schedule 23.05.2012
comment
не, това няма да стане автоматично... трябва да го копирате там.   -  person saadnib    schedule 23.05.2012
comment
Благодаря @saadnib. Както и да е, като копирах ръчно. Направих някои вмъквания, използвайки кода по-горе. След това, когато преглеждам базата данни в документи, това е същата db, която копирах без вмъкванията. Но вмъкванията работеха, защото ако мога да ги запитам от кода.   -  person user1412042    schedule 23.05.2012


Отговори (1)


За да получите достъп до вашата база данни с ресурси в папката Документи на приложението, първо трябва да я копирате там, когато приложението се стартира.

Ако файлът на базата данни е в папката с ресурси във вашия xcode проект, той не се копира автоматично в директорията с документи на приложението.

За целта можете да използвате:

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

NSError *error;

NSString *databasePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"YOUR_DB_IN_RESOURCES"];

[[NSFileManager defaultManager] copyItemAtPath:databasePath 
                                                toPath:[NSString stringWithFormat:@"%@/%@",documentsDirectory,@"YOUR_DB"]
                                                 error:&error];

След това ще имате достъп до базата данни, която сега е в папката с документи, като използвате вашия съществуващ код ([pathDB UTF8String] трябва да сочи към директорията с документи, а не към ресурсите).

Както споменахте, все още можете да използвате DB в ресурсите, но тя ще бъде изтрита всеки път, когато рестартирате приложението си. Номерът е да копирате db във вашата папка с документи, където ще остане, докато приложението не бъде изтрито ръчно от устройството (папката с документи също се запазва по време на актуализации на приложението, така че вашата db остава, когато потребителите актуализират приложението).

Надявам се това да помогне :)

person Mutix    schedule 23.05.2012