Ошибка этапа SQLite: попытка записи базы данных только для чтения с использованием оболочки - PullRequest
4 голосов
/ 06 мая 2010

Я получаю сообщение об ошибке «Ошибка этапа SQLite: попытка записи базы данных только для чтения» при использовании этого кода для копирования базы данных:

-(void)createEditableCopyOfDatabaseIfNeeded 
{
    // Testing for existence
    BOOL success;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *error;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                           NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *writableDBPath =
            [documentsDirectory stringByAppendingPathComponent:@"Money.sqlite"];

    success = [fileManager fileExistsAtPath:writableDBPath];
    if (success)
        return;

    // The writable database does not exist, so copy the default to
    // the appropriate location.
    NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath]
            stringByAppendingPathComponent:@"Money.sqlite"];
    success = [fileManager copyItemAtPath:defaultDBPath
                           toPath:writableDBPath
                           error:&error];
    if(!success)
    {
        NSAssert1(0,@"Failed to create writable database file with Message : '%@'.",
                 [error localizedDescription]);
    }
}

Я использую приведенный выше код в AppDelegate и это:

NSString *writableDBPath =
        [[NSBundle mainBundle] pathForResource:@"Money"
                               ofType:@"sqlite"];

В ViewController.m

Я использую http://th30z.netsons.org/2008/11/objective-c-sqlite-wrapper/ что я делаю не так?

Это происходит снова и снова ... Раньше все работало нормально, но снова проблема началась.

1 Ответ

7 голосов
/ 07 мая 2010

Проблема в том, что вы ничего не можете написать в свой пакет. Чтобы иметь возможность изменить базу данных, вам необходимо скопировать ее в папку документов или кэш-память приложения и работать с этой копией.

...