3

我正在使用 iPhone SDK,并且对 Objective-c 很陌生。现在我正在使用 NSUserDefaults 来保存和恢复我的 iPhone 应用程序上的设置。为了保存已经创建的类,我将它们编码成字典形式,然后保存 NSdictionary。

我的问题是我找不到一种合理的方法来以合理的方式在字典中存储非值(即为 nil 的类变量)。更具体地说,假设我有一个“狗”类,它有 NSString *tail-color。假设我正在尝试保存没有尾巴的狗的类实例,因此该实例的尾巴颜色为零。将狗保存为字典的合理方法是什么?它不会让我将 nil 保存到 NSdictionary 中。@"" 不好,因为如果我这样做 if(@""),@"" 是真的。我希望它像零一样是错误的。

我希望我的问题是有道理的,并感谢您的帮助!

4

4 回答 4

9

如果您没有为该键存储任何内容,nil则将在您调用时返回objectForKey:。如果你nil在读入数据的时候检查一下,就够了吗?或者,您可以使用objectsForKeys:notFoundMarker:它将返回默认值而不是nil.

因此,对于您没有的值,不要在字典中存储任何内容,并使用一种策略来处理读取时丢失的值。

您可以使用NSNull,但这并不标准,IMO。

于 2009-11-20T16:21:53.217 回答
7

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

[NSNull null]

但是,我建议使用存档来保存和恢复您的对象。

于 2009-11-20T16:21:47.810 回答
1

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

于 2009-11-20T16:22:17.540 回答
0

最好的解决方案是不保存在您的情况下为“nil”的值。在读取给定键的值是否不存在时,字典将返回“nil”。

于 2009-11-20T16:26:31.483 回答