Iphone 在objective-C中替换词典中使用nil

Iphone 在objective-C中替换词典中使用nil,iphone,objective-c,nsdictionary,null,Iphone,Objective C,Nsdictionary,Null,我在IPhone SDK中工作,对objective-c非常陌生。现在我正在使用NSUserDefaults在我的IPhone应用程序上保存和恢复设置。为了保存已创建的类,我将它们编码为字典形式,然后保存NSdictionary 我的问题是,我找不到一种合理的方法在字典中以合理的方式存储非值(即类变量为零)。更具体地说,假设我有一个类“Dog”,它有NSString*尾巴颜色。假设我试图保存一个没有尾巴的狗的类实例,那么该实例的尾巴颜色为零。什么是将狗保存为字典的合理方法?它不会让我把零存进字典

我在IPhone SDK中工作,对objective-c非常陌生。现在我正在使用NSUserDefaults在我的IPhone应用程序上保存和恢复设置。为了保存已创建的类,我将它们编码为字典形式,然后保存NSdictionary

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


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

您可以使用NSNull。将其实例化如下:

[NSNull null]

但是,我建议您保存并还原对象。

如果您没有为该键存储任何内容,则调用
objectForKey:
时将返回
nil
。如果在读取数据时检查
nil
,这是否足够?或者,您可以使用
objectsForKeys:notFoundMarker:
返回默认值,而不是
nil

因此,在字典中根本不存储你没有的值,并使用一种策略来处理阅读时丢失的值


您可以使用
NSNull
,但我觉得这并不标准。

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

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

我尝试过,它不会让我的NSString*为[NSNull]。它说“不同的objective-c类型的比较缺少强制转换”是的,NSNull用于表示集合类型中的nil值,但是您必须适当地处理它。这就是我建议归档的原因。这是一个好主意,但我的一些对象是数组,其中nil是对象之一。不幸的是,我不能制作一个缺少某个索引的数组。@ Ethan:在不太可能的情况下,您确实需要一个数组中的<代码> nIL/COD> >考虑使用<代码> NSNull < /C> > C数组或CFARTAL。看起来你还没有真正了解可可的做事方式。是的,我可能需要使用@并检查一下。我还是觉得这很愚蠢。我越来越不喜欢objective C了。不,不要把空字符串保存到字典里。根本不保存任何值。保存:
if(tailColor!=nil)[dict setObject:tailColor-forKey:@“tailColor”]tailColor=[dict objectForKey:@“tailColor”]很简单。