我有这样的错误 - *终止由于未被发现的例外“ nsinvalidargumentException”,原因:** - [nscfdictionary initwithObjects:forkeys:count:]:尝试在对象[0](键:搜索)''''

然后我尝试了以下代码

    if (Obj == (id)[NSNull null])  //Obj is an id 
{
    NSLog(@" Obj is (id)[NSNull null]");    
}
else if (Obj == nil)
{
    NSLog(@"Obj is nil");   
} 
else if (Obj == NULL)
{
    NSLog(@"Obj is NULL");  
} 
else
{
    NSLog(@"Obj is something else");
}

searchedDict = [NSDictionary dictionaryWithObject:Obj forKey:@"searched"];

我收到了nslog消息,因为“ obj是nil”。

但是,当我在OBJ为NSSTRING并且由于NIL值而被终止时使用了上述代码时,我收到了NSLOG消息,因为“ OBJ IS(ID)[nsnnull null]”。

零,零和[nsnull nil]之间有什么区别?

有不同种类的空值吗?如果是,如何通常检查这些空值?

谢谢 :-)

有帮助吗?

解决方案

NULL 是指向指针的原始C风格值,该值被认为指向没有明确的地址。通常只是用来表示“ unset”或 哨兵值.

char * oldstring = NULL;

nil 是应用于OBJ-C对象引用的相同内容的Objective-C版本:

NSString * str = nil;
id foo = nil;

它们都被定义为等于零值,尽管您 可以 互换使用它们,前者主要在OBJ-C内看到传统指针(例如设置 void * 上下文指示为null)和 nil 用于所有OBJ-C对象引用。

之所以存在差异,是因为尽管OBJ-C的语法恰好在C的顶部骑行,但该语言的设计是更高级别的,并且其对象ID 从概念上不一样 只是“指针”。因此,为他们创建了一个特殊的哨兵。

[NSNull null] 是一个对象 那是打算的 在某些情况下(例如插入集合)中使用“非价值”值,但实际 nil 不允许,必须使用对象。

注意 nilNSNull 弦乐非常相似: nil 串联为 (null), , 和 NSNull 作为 <null>.

其他提示

[NSNull null] 是包装纸 nil 如果您想要的话,您想在集合中插入的价值。

nsnull 类参考。

您还可以在对象引用是否为之前检查 nil 简单地与 ==.

nil 被定义为: #define nil NULL 并且是c的客观c NULL.

零是用于对象指针

Null用于非指针

nsnull null]是一个对象,代表不允许零值的情况下使用“ nil”(如文斯指出的那样,例如在集合中,例如Nsarray和Nsdictionary)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top