在Objective-C中替换词典中使用nil

时间:2009-11-20 16:18:21

标签: iphone objective-c nsdictionary null

我正在使用IPhone SDK,对于objective-c我是一个新手。现在我正在使用NSUserDefaults来保存和恢复我的iPhone应用程序上的设置。为了保存已创建的类,我将它们编码为字典形式,然后保存NSdictionary。

我的问题是我找不到合理的方法以合理的方式在字典中存储非值(I.E.一个nil的类变量)。更具体地说,我说我有一个“狗”类,它有NSString *尾色。让我们说我试图保存没有尾巴的狗的类实例,因此该实例的尾部颜色为零。拯救狗作为字典的合理方法是什么?它不会让我将nil保存到NSdictionary中。 @“”不好,因为如果我这样做(@“”),@“”是真的。我希望它像假的那样是假的。

我希望我的问题有道理,谢谢你的帮助!

4 个答案:

答案 0 :(得分:9)

如果您没有为该密钥存储任何内容,则在致电nil时将会返回objectForKey:。如果您在阅读数据时检查nil,那就足够了吗?或者,您可以使用objectsForKeys:notFoundMarker:来返回默认值而不是nil

因此,在字典中根本不存储您没有的值,并在阅读时使用策略来处理该值。

你可以使用NSNull,但这感觉不合标准,IMO。

答案 1 :(得分:7)

您可以使用NSNull。像这样实例化:

[NSNull null]

但我建议您Archiving保存和恢复您的对象。

答案 2 :(得分:1)

您应该使用NSNull来表示集合中的nil对象

答案 3 :(得分:0)

最好的解决方案是不保存您的案例中“零”的值。在读取您的给定键不存在该值时,字典将返回“nil”。