NSHomeDirectory возвращает другой путь при каждом перезапуске приложения iPhone

Я заметил, что NSHomeDirectory возвращает другой путь каждый раз, когда я перезапускаю приложение с помощью Xcode и, видимо, даже если я нажму на значок вручную, так как он не загружает содержимое файла. Я ошеломлен тем, что каждый раз, когда я перезапускаю приложение, он дает мне другой каталог. Это происходит как на симуляторе, так и на устройстве, и даже если я использую метод "ForUser". Мои вызовы выглядят так:

NSString* fullPath = [NSHomeDirectory() stringByAppendingPathComponent:@"test.file"];

или

NSString* fullPath = [NSHomeDirectoryForUser(@"MrX") stringByAppendingPathComponent:@"test.file"];

или даже

NSString *docsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *path = [docsDirectory stringByAppendingPathComponent:@"test.file"];

И журнал двух запусков приложений выглядит так: обратите внимание, как изменилась часть GUID:

loadCharacters: /var/mobile/Applications/ABE7E33E-439B-4258-8FC1-127A3CD00D87/test.file
loadCharacters: /var/mobile/Applications/71C02507-6347-4693-8CC1-537BE223179E/test.file

Что я делаю неправильно, или что мне не хватает?

РЕШЕНИЕ:

Сначала я сохранял сам NSHomeDirectory, а не подкаталог "Документы". Поскольку каталог приложений изменяется с каждым развертыванием, но копируются только файлы в каталоге "Документы", сохраненный файл теряется после каждого развертывания. Затем я использовал папку "Документы", но кто-то предложил мне, вероятно, поместить ее в подпапку "Документы", я сделал это, но забыл создать папку, поэтому файл не был сохранен. Я дважды потерпел неудачу на этом.:)

Простое сохранение в NSHomeDirectory() + "Documents/test.file" работает.

Ответы

Ответ 1

Вы делаете это правильно. Каждый раз, когда приложение устанавливается в симулятор или устройство, оно помещается в другой каталог (я не уверен, почему, но что происходит). Однако вся его структура каталогов перемещается в новую позицию. Таким образом, ваши RELATIVE пути останутся неизменными.

Ответ 2

Часть GUID в домашнем каталоге приложения представляет собой просто случайный UUID (как указано в третьей группе шестнадцатеричных цифр, начиная с "4" и 4-й группы, начиная с "8", "9", "A" 'или' B '. См. запись wikipedia на "универсально уникальный идентификатор" в качестве хорошего стартового места, если вы хотите узнать больше о UUID и уникальных идентификаторах в целом. Причина использования уникального идентификатора в пути к каталогу - это просто разделить одно приложение (и несколько расширений одного и того же приложения) друг от друга как часть песочницы (IMHO).