EDIT:
Только что придумал еще более простое решение. Вместо
moveItemAtPath: toPath: error :, просто используйте copyItemAtPath: toPath: error: ..., поскольку мы действительно хотим скопировать файл из mainBundle, а не перемещать его. Я должен был подумать об этом раньше!
1007 * Е.Г. *
[[NSFileManager defaultManager] copyItemAtPath:mainBundleFilePath
toPath:destPath
error:&err]
См. Мои предыдущие комментарии ниже о том, почему это работает.
Мне кажется, у меня есть ответ на этот вопрос. Я точно могу сказать, что проблема не в пути к файлу назначения.
Я получаю ту же ошибку Какао 513 (NSFileWriteNoPermissionError) с почти тем же кодом:
[[NSFileManager defaultManager] moveItemAtPath:mainBundleFilePath
toPath:destPath
error:&err]
Проблема заключается в том, что файл, поступающий из mainBundle, не имеет подходящих разрешений для перемещения в другое место. Я не уверен, что если эта команда, если она будет выполнена, действительно переместит файл из mainBundle или просто скопирует это ... но в любом случае, файловый менеджер не кажется Понравилась идея.
Решение простое: просто прочитайте файл mainBundle в объект NSData, а затем запишите NSData в новый файл. Обратите внимание, что путь к файлу назначения одинаков в обоих примерах, что показывает нам, что lostInTransit правильно сказал, что его путь к файлу в порядке.
В этом примере следующий код будет работать, а не выдавать ошибку:
NSData *mainBundleFile = [NSData dataWithContentsOfFile:mainBundleFilePath];
[[NSFileManager defaultManager] createFileAtPath:destPath
contents:mainBundleFile
attributes:nil];
Кстати, в моем собственном коде вместо передачи nil для атрибутов: я установил NSDictionary с атрибутом NSFileModificationDate. Я также обернул атрибуты createFileAtPath: contents: в ошибку, передающую оператор if. Другими словами,
if (![[NSFileManager defaultManager] createFileAtPath:destPath
contents:mainBundleFile
attributes:myAttributes]) {
// handle error as necessary, etc...
}
Мне потребовалось время, чтобы разобраться во всем этом, так что, надеюсь, это решение будет полезно для других.