2013-04-13 4 views
1

Я использую класс NSUserDefaults для хранения некоторых данных, но у меня нормальный конфликт относительно инициализации.iOS: NSUserDefaults во время первого запуска приложения?

Я имею в виду:

В моем классе А в методе didViewLoad, я поставил мои данные NSUserDefaults, а затем в моем классе B, в didViewLoad, я хочу, чтобы мои данные NSUserDefaults.

Я видел с точками останова, что во время первого запуска приложения выполнено все didViewLoad() приложения, поэтому я хотел бы поместить условие в viewDidLoad() моего класса B для первого -run-application, чтобы избежать случайной инициализации данных.

У нас есть ключевое слово в структуре Objective-C вместо использования статической переменной?

например:

ClassA -> didViewLoad():

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
[defaults setObject:kdataText forKey:@"udVariable"]; 

ClassB-> didViewLoad(): 

И:

ClassB -> didViewLoad():

if (!first_run){ // first_run --> KEYWORD FRAMEWORK??? 
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSString *var = [defaults objectForKey:@"udVariable"]; 
} 

ответ

4

Ключ к вызову registerDefaults еще раньше, например, в main или в делегате приложения applicationDidFinishLaunching:. Из приложения шахты:

[[NSUserDefaults standardUserDefaults] registerDefaults: 
    @{@"cardMatrixRows":@4, @"cardMatrixColumns":@3}]; 

В настоящее время существует по умолчанию по умолчанию а, как это было, и порядок событий/вид контроллеров больше не имеет значения.

+0

в качестве дополнения к этому ответу, регистрационные значения по умолчанию будут регистрировать любые новые значения unregisterd для каждой новой сборки вашего приложения, поэтому не стесняйтесь просто добавлять новые значения там – Eugene

+0

@matt, oh nice statements Matt! Это будет очень полезно для моих следующих шагов :). Но это заявление, на самом деле не исправить мою проблему, потому что мне нужно явное условие как: если (First_Run) { // ничего } еще { // получить данные из NSUserDefault } мне действительно нужно, если условие для корректного выполнения моего алгоритма. –

+0

@matt, я думаю, что я поймал то, что вы сказали. Я читал больше о [[NSUserDefaults standardUserDefaults] registerDefaults, но я всегда жду более прагматичной информации.Многие thx –

0

Просто проверьте, если [defaults objectForKey:@"udVariable"] != nil

Вы также можете использовать макрос #define.

+0

Спасибо, но это не проблема. Когда пользователь запускает приложение, а затем закрывает приложение и открывает его, данные NSUserDefaults немедленно не сбрасываются. :/ –

+0

@SAPDEV вы можете позвонить [по умолчанию синхронизация] после внесения некоторых изменений – AndrewShmig

+0

Спасибо Эндрю ... Я обнаружил, что: «Цель [синхронизация по умолчанию]; сделать так, чтобы пользовательские значения по умолчанию записывались на диск немедленно Вам не нужно вызывать его явно, iOS уже делает это в соответствующие моменты (например, при переходе на задний план). Таким образом, вы можете удалить эту строку. Фактически, это проблема с производительностью, если вы вызываете синхронизацию каждый раз, когда вы устанавливаете значение по умолчанию . "(DarkDust) В принципе, мне действительно нужно закодировать условие« IF », чтобы правильно следовать моему алгоритму. –

Смежные вопросы