Что случилось с моей копией здесь?
Я пытаюсь скопировать файл из моего пакета приложений в каталог документов приложения. Я получаю сообщение об ошибке "Cocoa Ошибка 262". Что я делаю не так? Здесь мой код:
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"CoreData.sqlite"];
NSURL *initialURL = [NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"CoreData" ofType:@"sqlite"]];
NSError *error = nil;
if (![[NSFileManager defaultManager] fileExistsAtPath:[initialURL absoluteString]]) {
NSLog(@"Original does not exist. \nPath: %@", [initialURL absoluteString]);
}
if (![[NSFileManager defaultManager] fileExistsAtPath:[storeURL absoluteString]]) {
NSLog(@"Destination file does not exist. \nPath: %@", [storeURL absoluteString]);
[[NSFileManager defaultManager] copyItemAtURL:initialURL toURL:storeURL error:&error];
NSLog(@"Error: %@", [error description]);
}
Ответы
Ответ 1
Проблема заключается в том, что вы инициализируете URL-адрес с простым старым пути к файлу.
NSURL *initialURL =
[NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"CoreData"
ofType:@"sqlite"]];
Используйте [NSURL fileURLWithPath:]
вместо этого.
Ответ 2
Ошибка, которую вы получаете, это
NSFileReadUnsupportedSchemeError
Read error because the specified URL scheme is unsupported
который, я считаю, будет означать, что один из ваших путей не формируется правильно. возможно, напишите эти пути в журнал и посмотрите, выходят ли они так, как вы ожидаете.
Ответ 3
Я решил проблему, хотя, честно говоря, я не уверен, что это было. Мне нужно снова выполнить рабочий код, но вот он:
NSError *error = nil;
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", @"CoreData", @"sqlite"]];
//if file does not exist in document directory, gets original from mainbundle and copies it to documents.
if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
NSString *defaultFilePath = [[NSBundle mainBundle] pathForResource:@"CoreData" ofType:@"sqlite"];
[[NSFileManager defaultManager] copyItemAtPath:defaultFilePath toPath:filePath error:&error];
if (error != nil) {
NSLog(@"Error: %@", error);
}
}
Изменить:
Я подозреваю, что путь к каталогу приложения был неправильным, учитывая, что тело сгенерированного applicationDocumentsDirectory
выглядит иначе, чем метод, используемый для значения переменной documentsDorectory
, показанной выше.
Ответ 4
Ошибка 262 определена в FoundationErrors.h как NSFileReadUnsupportedSchemeError.
Я бы предположил, что вы используете NSLog() для записи литеральных значений двух URL-адресов, которые вы используете, и убедитесь, что они являются файлами://URL-адресами и что они выглядят завершенными.