带有NSDictionary的数组不希望保存到standardUserDefaults

时间:2010-10-11 20:52:53

标签: iphone objective-c nsarray nsdictionary nsuserdefaults

我有一个......奇怪的问题。

我将NSDictionary添加到NSArray,然后将其保存为默认值。当我在用户默认值上检查该键的对象计数时,它表示计数为0,但是“在内存中”的数组具有该对象(因此计数为1)。

代码及其提供的输出是:

(数组是NSArray,默认为[NSUserDefaults standardUserDefaults])

- (void)addSongToQueue:(NSDictionary *)songData {
 [array addObject:songData];
 [defaults setObject:array forKey:@"OfflineArray"];
 [defaults synchronize];

#if DEBUG
 NSLog(@"Dictionary Data Received: %@", songData);
 NSLog(@"Object Count on Array: %u", [array count]);
 NSLog(@"Object Count on Defaults: %u", [[NSArray arrayWithArray:[defaults objectForKey:@"OfflineArray"]] count]);
 [defaults removeObjectForKey:@"OfflineArray"];
 [defaults synchronize];
#endif
}

这就是我所说的:

[className addSongToQueue:[NSDictionary dictionaryWithObjectsAndKeys:@"yadda", @"yadda", nil]];

这是输出:(我跑了两次,只是为了确保:P)

2010-10-11 21:47:35.807 AppName[1119:207] Dictionary Data Received: {
yadda = yadda;
    }

2010-10-11 21:47:35.807 AppName[1119:207] Object Count on Array: 1
2010-10-11 21:47:35.808 AppName[1119:207] Object Count on Defaults: 0
2010-10-11 21:47:36.647 AppName[1119:207] Dictionary Data Received: {
yadda = yadda;
    }

2010-10-11 21:47:36.647 AppName[1119:207] Object Count on Array: 2
2010-10-11 21:47:36.648 AppName[1119:207] Object Count on Defaults: 0

所以是的。我无法解决它。 :/

提前致谢。 :)

2 个答案:

答案 0 :(得分:3)

你确定defaults不是零吗?

答案 1 :(得分:1)

你真的只是将NSString个实例放入字典吗?每次我从NSUserDefaults看到不完整的保存时,都是因为字典中的某些对象与plist格式不兼容。您只能在plist格式的所有版本上存储NSNumberNSStringNSArrayNSDictionaryNSData(某些版本也允许NSDate