невозможно записать в базу данных sqlite - PullRequest
0 голосов
/ 21 апреля 2020

Моя программа должна работать с базой данных, и теперь я использовал инфраструктуру 'FMDB' и закрыл песочницу в своем проекте xcode.

, но у меня возникла проблема, это очень странно: на моем компьютере чтение / запись работать не проблема. (после архивирования как приложение), но на другом компьютере он может только читать, не может писать, почему? (База данных находится в исходной папке этого приложения.)

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

Моя система это "Ma c OS 10.15", я использую SDK этой версии '10 .13 'в Xcode.

Операция чтения: ↓

+ (charData *)getCharacteData:(NSString *)character
{

    NSString *databasePath = [[NSBundle mainBundle] pathForResource:@"CN_Characters" ofType:@"DB"];
    FMDatabase *db = [FMDatabase databaseWithPath:databasePath];
    [db open];

    FMResultSet *res = [db executeQuery:[NSString stringWithFormat:@"SELECT * FROM Proverbs WHERE character = '%@';",character]];
    charData *charDta = [charData new];
    if ([res next]) {
        charDta.character = [NSString stringWithString:[res stringForColumn:@"character"]];
        charDta.explanation = [NSString stringWithFormat:@"%@",[res stringForColumn:@"explanation"]];
    } else {
        return NULL;
    }
    [db close];
    return charDta;
}

Операция записи: ↓

+ (BOOL)saveCharacterDataWithCharacter:(NSString *)character Explanation:(NSString *)explanation
{
    NSString *databasePath = [[NSBundle mainBundle] pathForResource:@"CN_Characters" ofType:@"DB"];
    printf("databasePath: %s\n",databasePath.UTF8String);
    FMDatabase *db = [FMDatabase databaseWithPath:databasePath];
    [db open];

    BOOL res = [db executeUpdate:[NSString stringWithFormat:@"UPDATE Proverbs SET explanation = '%@' WHERE character = '%@'",explanation,character]];

    [db close];
    return res;
}

Это проблема с разрешением?

1 Ответ

0 голосов
/ 21 апреля 2020

Когда вы запускаете приложение, вам необходимо скопировать файл из пакета в каталог документов.

if([[NSFileManager defaultManager] copyItemAtPath: databasePath 
          toPath:[documentsDirectory stringByAppendingPathComponent:@"CN_Characters.DB"]
          error:&error]){

В противном случае он будет доступен только для чтения.

...