Я пытаюсь просто скопировать базу данных sqlite3 в каталог документов. Я получаю Cocoa Error 512
, и я понял, что это недопустимый каталог (или что-то в этом роде.
Файл базы данных находится в моей папке Resources в 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 = 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-55D6545BB WaypointDatabase.sql, NSUnderlyingError = 0xe8b7ee0 "Операция не может быть завершена. Не каталог" "}
2011-10-30 10: 36: 13,272 хххх [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 = "Ошибка домена = NSPOSIXErrorDomain Code = 20 \" Операция не может быть завершена \ U2019t. Не каталог \ "";
NSUserStringVariant = (
копия
);
} * * Тысяча двадцать-один
Я полагаю, это должно быть связано с получением путей к каталогам или чем-то еще, но я застрял в этом несколько дней.
Обратите внимание, это работает отлично и без ошибок на симуляторе.
Где я мог ошибиться?
[UPDATE]
Может ли это быть из-за того, что директория Documents
не существует? Как мне его создать / проверить?
[ОБНОВЛЕНИЕ 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
NSSearchPathForDirectoriesInDomains`
Вот вывод, который я получил
2011-10-30 10: 59: 16,934 xxxx [6774: 707] ~~ Содержание:
(Нуль)
2011-10-30 10: 59: 16,936 xxxx [6774: 707] ~~ Ошибка:
Ошибка домена = NSCocoaErrorDomain Code = 256 "Операция не может быть завершена. (Ошибка 256. Какао)." UserInfo = 0x10052580 {NSUserStringVariant = (
скоросшиватель
), NSFilePath = / var / mobile / Applications / FF654016-4257-47BB-99FE-55DB5453BBC6 / Documents, NSUnderlyingError = 0x10054a50 "Операция не может быть завершена. Не каталог"}