2015-06-09 1 views
0

Когда я открываю свое приложение в первый раз, у меня есть пустой plist, который я заполняю некоторыми значениями (writeToFile). Я могу читать с plist динамически и получать те значения, которые я только что вложил в него. Это все хорошо. Затем я закрываю приложение, а затем снова открываю его. На этом этапе я хочу, чтобы мой plist содержал те значения, которые я динамически написал в предыдущий раз, когда я открыл приложение, но, к моему недостатку, он пуст.Swift Заполненный plist пуст в следующий раз, когда я открываю приложение

Это нормальное поведение? Могу ли я использовать plist в качестве «локальной базы данных», где я динамически сохраняю значения и читаю их в другое время, когда приложение открывается?

Спасибо!

+0

Где вы положили этот Plist файл? Вы на Mac или iOS (или watchOS)? – idmean

+0

Я поместил plist в папку «Поддерживающие файлы» в моем проекте. Я работаю над iOS. – user2099024

+0

Ок, файлы в «поддерживающих файлах» не должны быть изменены. Если вы хотите сохранить предпочтения пользователей, выбор и т. Д., Вы должны создать файл plist в каталоге документов. – idmean

ответ

2

Файлы в «поддерживающих файлах» не должны изменяться.

Файлы группы поддерживающих файлов (как и все другие некодовые файлы), скопированные в пакет приложений. Apple говорит о пакете приложений:

Этот каталог содержит приложение и все его ресурсы. Вы не можете писать в этот каталог. [...] Запись в этот каталог изменяет подпись и препятствует запуску вашего приложения. Тем не менее, вы можете получить доступ только для чтения к любым ресурсам, хранящимся в комплекте приложений.

Если вы хотите сохранить предпочтения пользователей, выбор и т. Д., Вы должны создать файл plist в каталоге документов.

Используйте этот каталог для хранения созданного пользователями контента. Содержимое этого каталога может быть доступно пользователю через общий доступ к файлам; поэтому его каталог должен содержать только файлы, которые вы, возможно, захотите предоставить пользователю. Содержимое этого каталога подкрепляются Itunes

Вы можете получить путь к папке документов с помощью:

NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last as! String 

Если вы хотите сохранить предпочтения вы также можете взглянуть на NSUserDefaults.


https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html

+0

. m помещая plist непосредственно в корневую папку проекта в xcode. Когда я сохраняю plist, он сохраняется в: /Users/Avci/Library/Developer/CoreSimulator/Devices/FIRST-ID/data/Containers/Data/Application/SECOND-ID/Documents/my.plist. Когда я закрываю приложение, а затем снова открываю его и пытаюсь прочитать plist, на пути отображается другой «SECOND-ID», а plist пуст. Путь говорит, что он находится под «Контейнерами», который, я полагаю, ошибочен. Он должен перейти непосредственно к «Документам», если я правильно понял вас? Должен ли я разместить plist где-то еще в xcode? – user2099024

+0

@ пользователь2099024 место правильно. Однако похоже, что ваше приложение было удалено и переустановлено на симуляторе. Идентификатор приложения (второй идентификатор) не изменяется нормально. Попробуйте переустановить и переустановить его на симуляторе – idmean

+0

У меня все еще такая же проблема. Я также попытался развернуть его на своем телефоне без шнура для Mac. Сначала я запустил приложение и написал на plist, а затем прочитал его. Затем я закрыл приложение и снова запустил его, пытаясь прочитать из plist, на этот раз plist пуст еще раз. Возможно, новый «идентификатор приложения». Из того, что я вижу из другого потока, является то, что идентификатор приложения изменяется каждый раз по соображениям безопасности (iOS8), и поэтому я должен использовать основные данные, которых я не могу в моем случае ... – user2099024