Почему я не могу записать файлы в каталог документов моего приложения? - PullRequest
2 голосов
/ 18 июля 2009

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

[NSFileManager isWritbleAtPath:<my document folder>]

и вернул 0 (false). Нужно ли делать эту папку доступной для записи, и если да, то как мне это сделать?

Ответы [ 4 ]

2 голосов
/ 18 июля 2009

Симулятор iPhone должен иметь возможность записи на весь диск. Мое приложение регулярно сбрасывает тестовые файлы в корневой уровень моего загрузочного тома (используя [NSData's writeToPath:@"/test.jpg" atomically:NO]).

Вы уверены, что правильно определили путь к папке с документами? Вам нужно расширить тильду на пути. Вот код, который использует мое приложение, чтобы поместить вещи в папку документов. Я не думаю, что есть больше настройки!

brushesDir = [[@"~/Documents/BrushPacks/" stringByExpandingTildeInPath] retain];
// create brush packs folder if it does not exist
if (![[NSFileManager defaultManager] fileExistsAtPath: brushesDir])
            [[NSFileManager defaultManager] createDirectoryAtPath:brushesDir withIntermediateDirectories:YES attributes:nil error:nil];
1 голос
/ 18 июля 2009
NSLog(@"writable: %d", [[NSFileManager defaultManager] isWritableFileAtPath:NSHomeDirectory()]);

На консоли печатается 1.

Вы хотели вызвать метод isWritableAtPath или isWritableFileAtPath? И вы имели в виду вызывать его для самого класса или для его экземпляра (по умолчанию)?

0 голосов
/ 03 февраля 2011

У меня была тривиальная проблема с записью файла в NSBundle. У меня было требование, чтобы текстовый файл нужно было обновлять на сервере сразу после запуска приложения, и это хорошо работало с симулятором, но не с устройством. Позже я узнал, что у нас нет разрешения на запись с NSBundle. Копирование файла в каталог Documents из NSBundle и использование в моих целях решило мою проблему. Я использую : [myPlistData writeToFile:fileName atomically:NO];

0 голосов
/ 31 июля 2009

Спасибо за указатели. Поэтому, потратив несколько документов, я обнаружил, что поступаю неправильно: пытаюсь сохранить NSArray, который не состоит из основных типов данных, таких как NSDictionary, NSArray или NSString. Я пытался сохранить массив MPMediaItems (из MediaKit Framework в SDK 3.0 +).

...