#ios #swift #nsdictionary
#iOS #swift #nsdictionary
Вопрос:
Я хочу сохранить NSUserDefaults
информацию, нажал ли пользователь кнопку или нет. У меня есть две кнопки, одна имеет значение 1, другая -1.
Когда пользователь нажимает одну из этих двух кнопок, я делаю это:
if (self.defaults.objectForKey("pressedButtons") == nil){
let currentButtonId:[String:String] = [self.pressedButtons:vote]
self.defaults.setObject(currentButtonId, forKey: "pressedButtons")
self.defaults.synchronize()
} else {
var pressedButtons:[String:String] = self.defaults.objectForKey("pressedButtons") as! [String:String]
pressedButtons[self.button_id] = vote
self.defaults.setObject(pressedButtons, forKey: "pressedButtons")
self.defaults.synchronize()
}
в приведенном выше коде vote
есть строковое значение, которое может быть либо "1"
или "-1"
.
Теперь, когда пользователь возвращается к панели, я проверяю, нажал ли он уже кнопку или нет. Вот как я это проверяю:
if (self.defaults.objectForKey("pressedButtons") != nil){
if (self.defaults.objectForKey("pressedButtons")![currentButtonId] != nil) {
print("user already pressed")
print(self.defaults.objectForKey("pressedButtons")![currentButtonId])
} else {
print("USER didn't press the button yet")
}
} else {
print("USER didn't press the button yet for sure")
}
вывод, который я всегда вижу, это:
user already pressed
nil
Поскольку эта строка:
print(self.defaults.objectForKey("pressedButtons")![currentButtonId])
печатает nil
, почему я вижу сообщение о том, что пользователь нажал кнопку?
Комментарии:
1. Вы пробовали посмотреть, какие
self.defaults.objectForKey("pressedButtons")
отпечатки?2. Да, я это сделал, пока у меня там только одна запись:
Optional({ 583201282b9b12326fe2fee5 = 1;})
, но ситуация происходит независимо от того, какой идентификатор я ввелself.defaults.objectForKey("pressedButtons")![currentButtonId]
3. @user3766930 Можете ли вы попробовать то, что я только что опубликовал в качестве ответа
4. Вы контролируете значение
583201282b9b12326fe2fee5
? Чтоself.pressedButtons
именно вы храните в виде строки[self.pressedButtons:vote]
?5. Ребята, ответ @RajanMaheshwari сработал, я присвоил его переменной, и теперь он работает как шарм!
Ответ №1:
Возьмите этот объект, который всегда отображается как [String:String]
при извлечении
let variable = self.defaults.objectForKey("pressedButtons") as! [String:String]
Теперь это переменная типа [String:String]
Теперь извлеките свое значение соответствующим образом
Это не означает, что self.defaults.objectForKey("pressedButtons")
это объект с типом [String:String]
. Итак, сначала введите его, а затем используйте. Так self.defaults.objectForKey("pressedButtons")![currentButtonId]
что, похоже, это ноль
Комментарии:
1. Спасибо @Rajan, ты был прав, сохранив его как переменную, теперь он работает!