Подтвердить что ты не робот

IPhone: как скопировать файл из ресурсов в документы?

Я только начал с разработки iPhone. В одном из примеров, где мне пришлось отображать некоторые данные, хранящиеся в sqlite db в представлении таблицы в контроллере панели, мне пришлось переместить sqlite файл из пакета приложений в папку документов.

Я использовал шаблон приложения - iOS > Приложение > Окно-приложение для iPhone (Используемые основные данные для хранения)

В шаблоне, сгенерированном XCode (базовый sdk установлен на последнюю версию iOS = 4.2), появился следующий код...

- (NSURL *)applicationDocumentsDirectory {
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}

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

NSString *documentDirectory = [self applicationDocumentsDirectory];

Это дало предупреждение - warning: incompatible Objective-C types initializing 'struct NSURL *', expected 'struct NSString *'

Итак, я изменил код на следующий...

// Added the message absoluteString over here
NSString *documentDirectory = [[self applicationDocumentsDirectory] absoluteString];

NSString *writableDBPath = [documentDirectory stringByAppendingPathComponent:@"mydb.sqlite"];
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"mydb.sqlite"];
BOOL success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
if (!success) {
   NSLog(@"Failed to create writable database file with message '%@'.", [error localizedDescription]);
}

И БУМ!!! Это дало ошибку, что - 'Failed to create writable database file with message 'The operation couldn’t be completed. No such file or directory'.'

Как найти каталог путей к документам, поскольку метод applicationDocumentsDirectory, сгенерированный шаблоном XCode, не работает для меня.

Кроме того, кто-то может пролить свет на цель метода applicationDocumentsDirectory, приведенного выше.

Спасибо

4b9b3361

Ответ 1

Я просто наткнулся на это сам несколько дней назад. Не заставляйте вещи двигаться по пути пути, охватывая путь NSURL. Это не займет всего короткое время, чтобы узнать, как их использовать.

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

Ответ 2

Вот простой способ сделать это:

    NSFileManager *fmngr = [[NSFileManager alloc] init];
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"mydb.sqlite" ofType:nil];
    NSError *error;
    if(![fmngr copyItemAtPath:filePath toPath:[NSString stringWithFormat:@"%@/Documents/mydb.sqlite", NSHomeDirectory()] error:&error]) {
         // handle the error
         NSLog(@"Error creating the database: %@", [error description]);

    }
    [fmngr release];