iPhone: Как скопировать файл из ресурсов в документы? - PullRequest
10 голосов
/ 20 января 2011

Я только начал разработку 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 метода, приведенного выше.

Спасибо

Ответы [ 2 ]

20 голосов
/ 20 января 2011

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

    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];
5 голосов
/ 20 января 2011

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

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

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