Ошибка при попытке сделать записываемую копию sqlite - PullRequest
0 голосов
/ 18 января 2012

У меня есть копия моей базы данных в папке Supporting Files. Мне нужно обновить пару таблиц, и я пытаюсь использовать метод для создания записываемой копии БД.

- (void) createEditableDatabase
{
   BOOL success; 
   NSFileManager *fileManager = [NSFileManager defaultManager]; 
   NSError *error;
   NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
   NSString *documentsDir = [paths objectAtIndex:0];
   NSString *writableDB = [documentsDir stringByAppendingPathComponent:@"yc_ch.db"];
   success = [fileManager fileExistsAtPath:writableDB];
   NSString *defaultPath = [[[NSBundle mainBundle]resourcePath]stringByAppendingPathComponent:@"yc_ch.db"]; 
   success = [fileManager copyItemAtPath:defaultPath toPath:writableDB error:&error];
   if (!success) 
   {
    NSAssert1(0, @"Failed to create writable database file:'%@'.", [error localizedDescription]);
   }
}

Я создал (набрал физически) папку «Документы» в корне. На данный момент иерархия документов выглядит следующим образом:

enter image description here

Когда я запускаю свое приложение. Я получаю NSAssert1 (0, @ "Не удалось создать доступный для записи файл базы данных: '% @'.", [Error localizedDescription]);.

Что с ним не так?

1 Ответ

1 голос
/ 18 января 2012

Вы копируете файл, даже если файл уже существует в Документе, я думаю, что NSFileManager copyFileAtPath: вернет НЕТ, если файл уже существует в месте назначения, следовательно, провалит проверку и вызовет NSAssert

success = [fileManager fileExistsAtPath:writableDB];
if (success)
{
    return;
}

Таким образом, файл не копируется, если он уже существует в вашем документе. Если это и является причиной ошибки, можете ли вы на самом деле опубликовать утверждение, [error localizedDescription] по крайней мере скажет вам, что с ним не так в данный момент.

Edit:

- (void) createEditableDatabase
{
   BOOL success; 
   NSFileManager *fileManager = [NSFileManager defaultManager]; 
   NSError *error;
   NSString *writableDB = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"yc_ch.db"];
   NSLog(@"Document path = %@", writableDB);
   success = [fileManager fileExistsAtPath:writableDB];
   if (success)
   {
       return;
   }
   NSString *defaultPath = [[NSBundle mainBundle] pathForResource:@"yc_ch" ofType:@"db"];
   NSLog(@"defaultPath = %@", defaultPath);
   error = nil;
   success = [fileManager copyItemAtPath:defaultPath toPath:writableDB error:&error];
   if (!success) 
   {
       NSAssert1(0, @"Failed to create writable database file:%@", [error localizedDescription]);
   }
   if (error)
   {
        NSLog(@"error = %@", [error localizedDescription]);
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...