2013-09-12 1 views
3

У меня есть NSDictionary с NSNumbers как значения и ключи. Эти числа представляют определенные настройки в приложении, и я хотел бы сохранить словарь в UserDefaults. Поскольку NSNumbers являются свойства объекта-списка, я думал, что это должно работать, но я получить следующее сообщение об ошибке:только объекты списка свойств (NSNumber) в NSDictionary, но не могут хранить dict в UserDefaults

*** -[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value '{ 2 = 1; }' of class '__NSDictionaryM'. Note that dictionaries and arrays in property lists must also contain only property values.

The (упрощенный) тест-код я использую:

NSNumber *one = [NSNumber numberWithInt:1]; 
NSNumber *two = [NSNumber numberWithInt:2]; 
NSDictionary *defaultSetting = [[NSDictionary alloc] initWithObjectsAndKeys: one, two, nil]; 
[[NSUserDefaults standardUserDefaults] setObject:defaultSetting forKey:@"settings"]; 

Почему не работает ли это? Я не понимаю, что в этом плохого?

Спасибо за ваше время и ответы.

ответ

5

Ваш словарь должен быть такой:

NSDictionary *defaultSetting = [[NSDictionary alloc] initWithObjectsAndKeys: 
                 one, @"one", 
                 two, @"two", 
                 nil]; 
+0

Спасибо за ваш ответ. В моем случае число «2» является ключом для числа «1» (его значение #defined). Но UserDefaults не похоже, что NSNUmber является ключевым значением? (я использую его во всем приложении успешно). Если я конвертирую ключ в строку, это работает ..? – HesselM

+6

Ключи должны быть NSString, а не другим типом данных. – lykant

+4

Интересный .. Я проверил документацию NSDictionary, и вы действительно правы. Apple указывает, что любой объект может быть ключом, но требуется строка для кодирования ключа. Еще раз спасибо за ваш ответ! – HesselM