我有这两个成员:
int counter;
IBOutlet UILabel *count;
我按照以下方式使用它们:
- (void)saveCount {
NSDictionary *dict = [[NSUserDefaults standardUserDefaults] objectForKey:@"saveCount"] ;
NSMutableDictionary *mDict = [dict mutableCopy] ;
[mDict setObject:@(count) forKey:@(itemIndex)] ;
[[NSUserDefaults standardUserDefaults] setObject:mDict forKey:@"saveCount"] ;
[[NSUserDefaults standardUserDefaults] synchronize] ;
}
这一行:
[mDict setObject:@(count) forKey:@(itemIndex)] ;
给我一个错误 - "非法类型' UILabel'在盒装表达中使用"。 我做错了什么?
答案 0 :(得分:1)
您正在尝试将Label本身存储在用户默认值中,而不是标签的值。您可以使用NSString
存储标签的count.text
值。您还可以使用count.text.doubleValue
或count.text.integerValue
存储数字值。
您要保存的密钥也必须是NSString
。基于itemIndex变量的简单转换可以这样完成:
[mDict setObject:count.text forKey:@(itemIndex).stringValue];
编辑:更改为对dasblinkenlight的评论帐号
答案 1 :(得分:0)
根据代码,可以推断,在一些" save"动作,您希望将值保存在" UILabel"。
中我看到: - 当我们有兴趣保存" UILabel"内容,那么最好采取" UILabel-text"对某些钥匙存放它。就像这样;
[mDict setObject:@(count.text)forKey:@(itemIndex)];
是否有任何具体原因,使用" UILabel"对象作为字典中的值?
答案 2 :(得分:0)
NSUserDefaults无法存储“非属性”对象,这意味着您无法在字典中存储类似UILabel(UIView)或类似UIImage的内容并将其保存为默认值。 NSUserDefaults可以存储像NSData,NSString,NSNumber等“属性”...所以你应该把标签的文本放在NSUserDefaults中