Я хочу отправить свое приложение iPhone с некоторыми настройками, но мне не нужно создавать «Приложение настроек», используя plist и все такое. Я хотел бы сделать это с помощью NSUserDefaults и узнать, как хранить и извлекать данные из этого класса. Тем не менее, я борюсь с тем, как иметь начальный набор предпочтений там, когда пользователь загружает приложение в первый раз. Должен ли я получить NSUserDefaults в ViewDidLoad, и если они вернут нуль, установите их в этой точке? Или есть лучший метод?Хранение предпочтений, которые поставляются с iPhone без приложения настроек
ответ
Я бы сделал это, как вы предлагали. Проверьте, существуют ли уже существующие ключи пользователя по умолчанию, а если нет, создайте их с использованием значений по умолчанию.
Где вы это делаете, это зависит от вас, но, конечно, это должно произойти до того, как какая-либо часть вашего приложения действительно нуждается в некоторой информации. Итак, как предположил mbehan, вы можете выполнить эту проверку init внутри didFinishLaunching вашего appdelegate.
Кажется, отлично работает. благодаря! – JMH
Там же метод, что:
[[NSUserDefaults standardUserDefaults] registerDefaults:aDictionary];
Метод принимает словарь ключей/значений для NSUserDefaults использовать, если пользователь ничего более конкретного не установлен.
Необходимо называть это каждый раз, когда приложение запускается. Apple предлагает:
Содержание домена регистрации не записывается на диск; вам нужно вызывать этот метод каждый раз, когда ваше приложение запускается. Вы можете поместить файл plist в каталог ресурсов приложения и вызвать registerDefaults: с содержимым, которое вы читаете в этом файле.
Я провел некоторое время, рассматривая документацию на iPhone и несколько сообщений. Я думаю, что для большинства целей достаточно, если вы не хотите создавать настройки для своего приложения в приложении «Настройки».
Вот фрагмент кода, который вы можете оставить в AppDelegate didFinishLaunching:
NSString *test = @"Test";
NSString *testKey = @"TestKey";
NSString *test2 = @"Test2";
NSString *test2Key = @"Test2Key";
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:test,testKey,test2,test2Key,nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dict];
/*
Alternative if we want to create default values in a file called Defaults.plist in Resources folder
[[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Defaults" ofType:@"plist"]]];
To set the preference within the app:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"MyNewTest" forKey:@"TestKey"];
To retrieve the preference within the app:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *results = [defaults stringForKey:@"TestKey"];
Can also use the following syntax:
intForKey:
floatForKey:
boolForKey:
objectForKey:
Returns Objective-C object like NSString, NDDate, or NSNumber
If the object is not a string, may need to specify the value, such as
Label.text = [[defaults objectForKey:@"TestPreferenceStoredAsNumber"]stringValue];
*/
Поместите следующий в AppDelegate applicationWillTerminate и applicationDidEnterBackground:
[[NSUserDefaults standardUserDefaults]synchronize];
Затем, чтобы просмотреть предпочтения, поместите этот код в удобное место:
// View all keys and values in Console
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
Спасибо Jon. Забыл о синхронизации в appWillTerminate и appDidEnterBackground. – JMH
Что вы предлагаете, я бы сделал это в y приложение нашего приложения делегата: didFinishLaunching – mbehan