Не могу сохранить файл на диск, не знаю почему

Я пытаюсь записать строку на диск:

return [fileContent writeToFile:path atomically:YES encoding:NSUnicodeStringEncoding error:error];

Но это всегда терпит неудачу со следующей ошибкой:

Error Domain=NSCocoaErrorDomain Code=4 "The folder “ddd.csv” doesn’t exist." UserInfo=0xc4a08b0 {NSUnderlyingError=0xc49ba60 "The operation couldn’t be completed. No such file or directory", NSFilePath=file://<path to file>, NSUserStringVariant=Folder}

Путь к файлу кажется правильным (я его здесь скрыл), а длина строки (NSMutableString) определенно не равна 0. Этот код работал до Mountain Lion. Может ли кто-нибудь помочь пролить свет на то, что может происходить?

Изменить: значение path: file://localhost/Users/cocoaster/Downloads/ddd.csv


person ruipacheco    schedule 02.09.2012    source источник
comment
Помогло бы узнать, каково значение path. И, скорее всего, ваше приложение находится в песочнице, поэтому доступ к чему-либо вне этого приведет к ошибке.   -  person WrightsCS    schedule 03.09.2012
comment
Да, на 99% уверен, что вы просто указываете не тот каталог. Файлы должны находиться в одном из подкаталогов личного каталога приложения.   -  person Hot Licks    schedule 03.09.2012
comment
Я добавил значение path. Я запускаю это под Xcode, но я не помню, чтобы что-то настраивал с точки зрения песочницы.   -  person ruipacheco    schedule 03.09.2012
comment
Это URL-адрес или строка URL-адреса, а не типичный путь к файлу. Попробуйте /Users/cocoaster/Downloads/ddd.csv   -  person rdelmar    schedule 03.09.2012
comment
Предполагается, что это путь, выбранный конечным пользователем. Как разрешить пользователям сохранять файлы на диск?   -  person ruipacheco    schedule 03.09.2012
comment
Кстати, это родное приложение OSx или приложение для iOS/iPhone?   -  person Hot Licks    schedule 03.09.2012
comment
Выбрали как? Это из панели сохранения?   -  person rdelmar    schedule 03.09.2012
comment
Панель сохранения возвращает URL-адрес, а не путь. Вам нужно преобразовать в путь [url path]   -  person rdelmar    schedule 03.09.2012
comment
Или используйте вместо этого writeToURL:atomically:.   -  person rdelmar    schedule 03.09.2012
comment
Идеально. Можете ли вы поместить это в ответ, чтобы я мог его принять?   -  person ruipacheco    schedule 03.09.2012


Ответы (1)


Поскольку вы используете панель сохранения, результат возвращается в виде URL-адреса, поэтому, если вам нужен путь, преобразуйте результат в путь с помощью команды пути: [url-путь].

В качестве альтернативы вы можете использовать writeToURL:atomically: если эта версия доступна для любого класса fileContent.

person rdelmar    schedule 02.09.2012
comment
URL-адреса рекомендуются вместо путей в современном коде, и NSStrings действительно реагируют на writeToURL:atomically:encoding:error:. - person Peter Hosey; 03.09.2012