Xcode 5.0 NSUserdefaults по-прежнему получают сохраненные предпочтения после удаления plist
У меня возникла проблема с программированием приложения osx на Xcode 5 при использовании NSUserDefaults. Обычно мы используем [[NSUserDefaults standardUserDefaults] setObject:@"This is an object" forKey:@"Test"]
для запоминания предпочтений пользователя. После этого приложение будет генерировать файл plist в ~/Library/Preferences/application.bundle.identifier.plist.
Проблема заключается в том, что после удаления файла plist приложение все равно может получить настройки, которые я сохранил. Невозможно очистить этот plist, даже если я попытался очистить проект, перезапустить xcode, удалить файлы в производной папке. Единственный способ решить эту проблему - перезагрузить систему, поэтому я думаю, что в памяти есть что-то. Вопрос в том, как я могу очистить эти сохраненные настройки? (Я не думаю, что удобно очищать предпочтения, добавляя код вручную при отладке и тестировании.) И я попробовал бывшую версию Xcode 4.x, нет такой проблемы. Любой, кто заинтересован, может просто создать новый проект cocoa и добавить код, например:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"This is an object." forKey:@"Test"];
NSLog(@"%@", [defaults objectForKey:@"Test"]);
в разделе "applicationDidFinishLaunching". Затем перейдите и удалите ~/Library/Preferences/application.bundle.identifier.plist
.
После этого прокомментируйте строку: [defaults setObject:@"This is an object." forKey:@"Test"];
в вашем коде и снова запустить приложение. Консоль покажет "This is an object."
Моя среда - Mavericks GM и Xcode 5.0 (5a1413).
Надеюсь, что это не то, что только что произошло со мной и оценило любую помощь!
Ответы
Ответ 1
Это проблема с OS X, не связанная напрямую с версией Xcode, которую вы используете. Официальная строка Apple заключается в том, что удаление файла plist для удаления предпочтений никогда официально не поддерживалось, а в более поздних версиях OS X оно ненадежно из-за изменений в способе сохранения предпочтений.
Поддерживаемый способ удаления настроек - использовать команду defaults
на терминале, например:
defaults delete application.bundle.identifier
Команда defaults
также может удалять/изменять индивидуальные настройки в настройках. Подробнее см. man defaults
.