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.