Копирование файла из пакета в неработающие документы (ошибка какао 512)

Я пытаюсь просто скопировать мою базу данных sqlite3 в каталог документов. Я получаю Cocoa Error 512 и я понял, что это не действительный каталог (или что-то в этом роде.

Файл базы данных находится в папке «Мои ресурсы» в XCode. (Имя файла верное)

Вот код, который я пытаюсь использовать:

 -(void) checkAndCreateDatabase { BOOL success; NSFileManager *fileManager = [NSFileManager defaultManager]; NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDir = [documentPaths objectAtIndex:0]; //databasePath + databaseName is declared in the header databaseName = @"WaypointDatabase.sql"; databasePath = [documentsDir stringByAppendingPathComponent:databaseName]; success = [fileManager fileExistsAtPath:databasePath]; if(success) { NSLog(@"Database exists"); return; } else NSLog(@"Database does not exists"); NSString *databasePathFromApp = [[NSBundle mainBundle] pathForResource:@"WaypointDatabase" ofType:@"sql"]; if(databasePathFromApp == nil) { NSLog(@"ERROR: IT IS NIL"); } NSError* error = nil; NSLog(@"Path in bundle:\n%@\n\n", databasePathFromApp); NSLog(@"Path to copy to:\n%@\n\n", databasePath); [fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:&error]; [fileManager release]; if (error) { NSLog(@"%@\n\n", error); NSLog(@"%@", [error userInfo]); } } 

И вывод на консоль, который я получаю:

2011-10-30 10: 36: 13.242 xxxx [6726: 707] База данных не существует
2011-10-30 10: 36: 13.249 xxxx [6726: 707] Путь в комплекте:
/var/mobile/Applications/FF654016-4257-47BB-99FE-55DB5453BBC6/xxxx.app/WaypointDatabase.sql

2011-10-30 10: 36: 13.252 xxxx [6726: 707] Путь для копирования:
/var/mobile/Applications/FF654016-4257-47BB-99FE-55DB5453BBC6/Documents/WaypointDatabase.sql

2011-10-30 10: 36: 13.268 xxxx [6726: 707] Ошибка домена = NSCocoaErrorDomain Code = 512 «Операция не может быть выполнена. (Ошибка какао 512.)» UserInfo = 0xe8b7cd0 {NSUserStringVariant = (Копировать), NSFilePath = / var / mobile / Applications / FF654016-4257-47BB-99FE-55DB5453BBC6 / xxxx.app / WaypointDatabase.sql, NSDestinationFilePath = / var / mobile / Applications / FF654016-4257-47BB-99FE-55DB5453BBC6 / Documents / WaypointDatabase.sql , NSUnderlyingError = 0xe8b7ee0 «Операция не может быть выполнена. Не каталог»}

2011-10-30 10: 36: 13.272 xxxx [6726: 707] {NSDestinationFilePath = "/var/mobile/Applications/FF654016-4257-47BB-99FE-55DB5453BBC6/Documents/WaypointDatabase.sql"; NSFilePath = "/var/mobile/Applications/FF654016-4257-47BB-99FE-55DB5453BBC6/xxxx.app/WaypointDatabase.sql"; NSUnderlyingError = "Error Domain = NSPOSIXErrorDomain Code = 20 \" Операция cann \ U2019t будет завершена. Не каталог \ ""; NSUserStringVariant = (Копировать); }

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

Обратите внимание, что это отлично работает и без ошибок на симуляторе.

Где я мог поступить неправильно?

[ОБНОВИТЬ]

Может ли это быть из-за того, что каталог Documents folder не существует? Как я собираюсь создать / проверить его?

[ОБНОВЛЕНИЕ 2]

Я сделал некоторые другие тесты, используя

 NSFileManager *fileManager = [NSFileManager defaultManager]; NSError *err = nil; NSArray *dirArr = [fileManager contentsOfDirectoryAtPath:documentsDir error:&err]; NSLog(@"~~Contents:\n%@",dirArr); NSLog(@"~~Error: \n%@",err); 

И удивительно, что он дал Cocoa Error 256 а также сказал «Не каталог». Это почти так, как если бы Documents directory does not exist. But it does, according to Documents directory does not exist. But it does, according to NSSearchPathForDirectoriesInDomains`

Вот результат, который я получил

2011-10-30 10: 59: 16,934 xxxx [6774: 707] ~~ Содержание:
(ноль)
2011-10-30 10: 59: 16.936 xxxx [6774: 707] ~~ Ошибка:
Error Domain = NSCocoaErrorDomain Code = 256 «Операция не может быть выполнена (ошибка Cocoa 256.)« UserInfo = 0x10052580 {NSUserStringVariant = (Папка), NSFilePath = / var / mobile / Applications / FF654016-4257-47BB-99FE- 55DB5453BBC6 / Documents, NSUnderlyingError = 0x10054a50 «Операция не может быть выполнена. Не каталог»}

2 Solutions collect form web for “Копирование файла из пакета в неработающие документы (ошибка какао 512)”

Проблема решена путем установки нестандартного идентификатора пакета в файле info.plist

Я использовал идентификатор Bundle из iTunes Connect для этого конкретного приложения. Теперь все работает отлично.

Попробуйте изменить

 [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName]; 

для

 [[NSBundle mainBundle] pathForResource:@"WaypointDatabase" ofType:@"sql"]; 

и убедитесь, что это не возвращает nil чтобы убедиться, что это не то, что происходит неправильно, кроме того, что он выглядит хорошо для меня при первом просмотре.

  • Как я могу создать UIColor из шестнадцатеричной строки?
  • Автоматический макет визуального языка программирования для массива представлений
  • Когда я загружаю новый вид в Cocoa Touch, он сдвигает все примерно на 20 пикселей
  • Как сделать прозрачный фон см. На главном экране?
  • как я могу ограничить область карты только одной страной в iOS?
  • Можете ли вы анимировать setRootViewController?
  • Создание круглых углов для UIImage
  • set bundle - поведение по умолчанию?
  • AlamofireImage af_setImageWithURL в UITableViewCell без изображения заполнителя
  • Каков наилучший способ уменьшить масштаб и вставить все аннотации в MapKit
  • Как я могу обновить представление каждый раз при нажатии элемента панели вкладок?
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.