Каталог документов в iPod Touch и iPhone - PullRequest
3 голосов
/ 12 июля 2009

Я разрабатываю приложение, которое считывает данные на iPod touch / iPhone, которые отправляются на него через многоадресные сокеты с UDP, и мне нужно сохранить их в виде файла в каталоге документов. Это существует на iPhone или iPod Touch? Я знаю, что есть NSFileHandle и NSFileManager, который я собираюсь использовать для чтения и записи в файл, но я не уверен, где находится раздел «Мои документы» iPod touch, если вы знаете, что я говорю. Я еще не знаком с каталогом файлов iPod / iPhone, поэтому любая помощь приветствуется! Существует ли какая-то «общая» директория, в которой все разработчики используют свои файлы, если они имеют какое-либо отношение к своему приложению?

Ответы [ 2 ]

7 голосов
/ 04 октября 2010

Совсем недавно шаблон для приложения Core Data предоставляет код, подобный следующему:

- (NSString *)applicationDocumentsDirectory {
    return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}

Если возвращенный NSArray из NSSearchPathForDirectoriesInDomains пуст, lastObject возвращает nil, поэтому в результате код становится короче иcleaner.

Одна вещь, о которой вы должны знать - начиная с iOS 5, вы не должны помещать не сгенерированные пользователем данные в каталог Documents.Ваше приложение может быть отклонено.Вместо этого вам следует подумать о том, чтобы поместить такие журналы в каталог Caches.Чтобы получить этот путь, вам нужно заменить NSDocumentDirectory на NSCachesDirectory в приведенном выше примере кода.

7 голосов
/ 12 июля 2009

Вы должны использовать каталог документов вашего приложения для хранения постоянных файлов. Вы можете получить путь к каталогу, используя эту функцию, которую Apple включает в свой шаблон для приложения, использующего Core Data:

/**
 Returns the path to the application's documents directory.
 */
- (NSString *)applicationDocumentsDirectory {

    NSArray *paths = 
      NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
    return basePath;
}
...