NSHomeDirectory возвращает разные пути каждый раз при перезапуске приложения iPhone - PullRequest
15 голосов
/ 28 января 2010

Я заметил, что 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, а не в подкаталоге «Documents». Поскольку каталог приложения меняется при каждом развертывании, но копируются только файлы в каталоге «Документы», сохраненный файл теряется после каждого развертывания. Затем я использовал папку «Документы», но кто-то предложил мне поместить ее в подпапку «Документы». Я сделал это, но забыл создать папку, поэтому файл не был сохранен. Я дважды провалился на этом. :)

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

Ответы [ 2 ]

22 голосов
/ 28 января 2010

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

0 голосов
/ 01 января 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...