Objective c NSDictionary未设置值
我得到的字典值为零。 我肯定这里有一些愚蠢的东西我找不到。 用户第一次的默认值是nil,也许这就是问题所在Objective c NSDictionary未设置值,objective-c,Objective C,我得到的字典值为零。 我肯定这里有一些愚蠢的东西我找不到。 用户第一次的默认值是nil,也许这就是问题所在 NSDate *date=[NSDate date]; //read NSMutableDictionary *dic=[[NSMutableDictionary alloc] init]; dic=[[NSUserDefaults standardUserDefaults] objectForKey:@"list"]; [dic setObject:d
NSDate *date=[NSDate date];
//read
NSMutableDictionary *dic=[[NSMutableDictionary alloc] init];
dic=[[NSUserDefaults standardUserDefaults] objectForKey:@"list"];
[dic setObject:dataToSave forKey:date];
NSLog(@"%@",dic);//show nil where "dataToSave" is not nil.
您正在使用一个新字典初始化
dic
var,然后使用NSUserDefaults
条目重新初始化它,我猜它是零
NSDate *date=[NSDate date];
//read
NSMutableDictionary *dic = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"list"].mutableCopy;
if(!dic)
{
dic = [[NSMutableDictionary alloc] init];
}
[dic setObject:dataToSave forKey:date];
// if you want to save back to NSUserDefaults, you will need to do this
[[NSUserDefaults standardUserDefaults] setObject:dic forKey:@"list"];
编辑
正如rmaddy指出的那样,这是行不通的,因为您不能在保存到NSUserDefaults
的字典中使用非NSStrings
键
为了使其工作,需要用字符串替换date
var
Edit2
修改答案以允许
NSMutableDictionary
如何填充dataToSave
?当您将nsserdefaults
中的列表
值指定给dic
时,为什么要分配/init一个NSMutableDictionary
以丢弃它?在nsserdefaults
中实际上有一个值吗对于@“list”
?要保存的数据是NSMutableDictionary的NSMutableArray,我分配它只是为了检查和确定。@maddy-正如我第一次写的,这里没有值。所以,如果我放弃这条线,它会起作用,我不知道为什么。此外,如果我试图将此词典保存回默认值,它将崩溃。为什么?注意-这不起作用,因为date
不是NSString
。所有键必须是NSString
才能将字典存储在NSUserDefaults
中。好的,谢谢,它确实有效,但现在当我试图将dic保存为默认值时,它崩溃了。[[NSUserDefaults standardUserDefaults]设置对象:dic forKey:@“列表”];为什么?maddy这不对你可以把nsdate保存为密钥@Curnelious该链接不包括将词典放入NSUserDefaults
。我说的是实话。如果字典具有非字符串键(或非属性列表安全值),则无法将其放入NSUserDefaults
。这里还有另一个错误:无法安全地将NSUserDefaults方法的返回值视为可变的。在某些系统上,它会以奇怪的方式运行(忽略-setObject:forKey:神秘地),而在像Mavericks这样的较新系统上会彻底崩溃。如果要对从NSUserDefaults检索到的内容进行变异,则必须创建可变副本。