2010-11-15 2 views
0

Я хочу отправить свое приложение iPhone с некоторыми настройками, но мне не нужно создавать «Приложение настроек», используя plist и все такое. Я хотел бы сделать это с помощью NSUserDefaults и узнать, как хранить и извлекать данные из этого класса. Тем не менее, я борюсь с тем, как иметь начальный набор предпочтений там, когда пользователь загружает приложение в первый раз. Должен ли я получить NSUserDefaults в ViewDidLoad, и если они вернут нуль, установите их в этой точке? Или есть лучший метод?Хранение предпочтений, которые поставляются с iPhone без приложения настроек

+0

Что вы предлагаете, я бы сделал это в y приложение нашего приложения делегата: didFinishLaunching – mbehan

ответ

1

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

Где вы это делаете, это зависит от вас, но, конечно, это должно произойти до того, как какая-либо часть вашего приложения действительно нуждается в некоторой информации. Итак, как предположил mbehan, вы можете выполнить эту проверку init внутри didFinishLaunching вашего appdelegate.

+0

Кажется, отлично работает. благодаря! – JMH

1

Там же метод, что:

[[NSUserDefaults standardUserDefaults] registerDefaults:aDictionary]; 

Метод принимает словарь ключей/значений для NSUserDefaults использовать, если пользователь ничего более конкретного не установлен.

Необходимо называть это каждый раз, когда приложение запускается. Apple предлагает:

Содержание домена регистрации не записывается на диск; вам нужно вызывать этот метод каждый раз, когда ваше приложение запускается. Вы можете поместить файл plist в каталог ресурсов приложения и вызвать registerDefaults: с содержимым, которое вы читаете в этом файле.

0

Я провел некоторое время, рассматривая документацию на 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]); 
+0

Спасибо Jon. Забыл о синхронизации в appWillTerminate и appDidEnterBackground. – JMH