iPhone не создает файл базы данных sqlite - PullRequest
0 голосов
/ 26 февраля 2011

У меня проблема с созданием моего файла базы данных.Я использую эту функцию:

- (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:DATABASE_NAME];

    NSLog(@"%@", writableDBPath);

    success = [fileManager fileExistsAtPath:writableDBPath];
    if (success) {
        NSLog(@"The file was here");
        return;
    }

    // The writable database does not exist, so copy the default to
    // the appropriate location.
    NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath]
                               stringByAppendingPathComponent:DATABASE_NAME];
    success = [fileManager copyItemAtPath:defaultDBPath
                                   toPath:writableDBPath
                                    error:&error];
    NSLog(@"New file created");

    if(!success)
    {
        NSAssert1(0,@"Failed to create writable database file with Message : '%@'.",
                  [error localizedDescription]);
    }
}

Выполнение этого всегда генерирует журнал «Новый файл создан», но если я указываю свой искатель на путь к БД, я нахожу пустую папку: файл не был создан!

В чем проблема, по вашему мнению?

(у меня есть другое приложение, использующее ту же функцию, и оно работает хорошо!)

ОБНОВЛЕНИЕ:

Еслия использую функцию «перейти в папку» в поиске и вставке в defaultDBPath, она говорит мне, что у меня нет привилегий, необходимых для доступа к папке

Ответы [ 2 ]

1 голос
/ 26 февраля 2011

Не могу сразу определить проблему с вашим общим кодом, но учтите, что NSLog(@"New file created"); всегда будет происходить, поскольку вы не проверяете success. Как и в случае с тестом на наличие файла, вам нужно проверить success:

if (success)
    NSLog(@"New file created");

Тогда вы, по крайней мере, будете правильно проверять, считает ли он, что файл создан. Если нет, дважды проверьте переменные defaultDBPath и writableDBPath.

0 голосов
/ 02 марта 2011

Хорошо, я решил это ... очень глупо с моей стороны!

Просто я установил для DATABASE_NAME значение "villaggio. db", в то время как мой настоящий БД был назван "villaggio. sqlite" !!!

= D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...