Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSDictionary未设置值_Objective C - Fatal编程技术网

Objective c NSDictionary未设置值

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

我得到的字典值为零。 我肯定这里有一些愚蠢的东西我找不到。 用户第一次的默认值是nil,也许这就是问题所在

 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检索到的内容进行变异,则必须创建可变副本。