iOS Пользовательские значения по умолчанию – мне нужно использовать setInteger: forKey: если я намерен извлекать примитивы из значений по умолчанию с помощью integerForKey :?

Я пытаюсь распаковать словарь и сохранить его в настройках по умолчанию. Словарь содержит как строки, так и числа / bools.

В моем случае использования я получаю числа с использованием intergerForKey: и boolForKey: для этого случая использования мне нужно хранить числа в пользовательских значениях по умолчанию, используя setInteger: forKey:, или я могу использовать общий набор setObject: forKey: и дать ему число *?

  - (void)configureWithJSON:(NSDictionary *)conf { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSNumber *timeout = (NSNumber *)conf[@"timeout"]; if(timeout != nil) { [defaults setInteger:[timeout intValue] forKey:@"timeout"]; } //OR [defaults setObject:timeout forKey:@"timeout"]; } //then, in code I use [defaults boolForKey:@"timeout"]? 

В конце концов, это не имеет значения, оба будут работать. Тогда читаемость начинается, а setInteger явно выражает намерение более четко, чем setObject .

Вы можете добавить числа и bools в класс NSNumber и сохранить его по умолчанию как объект.

 [defaults setObject:[NSNumber numberWithInt:intValue] forKey:@"timeout"]; 

Или

 [defaults setObject:[NSNumber numberWithBool:boolValue] forKey:@"timeout"]; 

Вы уверены, что ваш словарь содержит целые числа и логические значения? Афайские словари могут содержать только объекты. Это означает объекты NSNumber, представляющие bools или integers. По-видимому, вы получаете объект NSNumber.

Вы можете сохранить объекты NSNumber непосредственно вместе со всеми другими свойствами без переадресации через setInterger. Нет смысла конвертировать NSNumber в int или bool соответственно и преобразовывать их обратно в NSNumber позже, когда вы извлекаете их из хранилища свойств.

Короткие: Идите

  [defaults setObject:timeout forKey:@"timeout"];