У меня есть 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"];
Почему не работает ли это? Я не понимаю, что в этом плохого?
Спасибо за ваше время и ответы.
Спасибо за ваш ответ. В моем случае число «2» является ключом для числа «1» (его значение #defined). Но UserDefaults не похоже, что NSNUmber является ключевым значением? (я использую его во всем приложении успешно). Если я конвертирую ключ в строку, это работает ..? – HesselM
Ключи должны быть NSString, а не другим типом данных. – lykant
Интересный .. Я проверил документацию NSDictionary, и вы действительно правы. Apple указывает, что любой объект может быть ключом, но требуется строка для кодирования ключа. Еще раз спасибо за ваш ответ! – HesselM