SO
我想检查一下我的数组[clientDataArray objectForKey:@"ClientCompany"]
中的项目是否为nil
。
temp = [clientDataArray objectForKey:@"ClientCompany"];
if (temp != [NSNull null]) infofieldCompany.text = temp;
到目前为止,我已经能够通过上面的代码实现这一点,但它确实给了我警告
NSArray
可能无法回复-objectForKey:
struct NSNull *
并且struct NSString *
缺少演员我的主要兴趣是第二次警告,但第一次警告也让我感兴趣。 我该如何调整上面的代码?
答案 0 :(得分:20)
您的第一次警告看起来就像是在objectForKey
上致电NSArray
。哪个不起作用,因为NSArray
没有objectForKey
方法。
至于第二个警告,你可以直接与nil比较,即:
if (temp != nil)
或者因为nil等于0,你也可以这样做:
if (temp)
答案 1 :(得分:16)
尝试所有选项后,我认为这是比较NSString null
的最佳选择if ( temp != ( NSString *) [ NSNull null ] )
{
// do some thing
}
答案 2 :(得分:14)
之前给出的两个答案都错过了一个基本点:你不能将nil
放入一个数组中,所以你永远不会从数组中得到nil
。 在数组中使用NSNull
作为占位符是正确的做法,但是,您的变量temp
则无法声明为NSString *
,因为它可能不会是一个。使用NSObject *
或id
作为变量的类型来禁止比较警告。
答案 3 :(得分:2)
测试NULL或Empty值的最佳解决方案:
if (yourObj.yourString == (NSString*) [NSNull null] || yourObj.yourString.length == 0 )
{
yourObj.yourString = @"";
}
答案 4 :(得分:1)
安静简单
if (myString == nil){
NSLog(@"myString is null");
}
答案 5 :(得分:0)
我认为问题是(我的意思是第二个警告)是你在比较NSString对象,它可以设置为null到NSNull对象。
您是否尝试过通常的C方式检查null?
if(temp) {
// It's not null, do something.
}
我不是100%肯定这个,但你可以尝试一下。如果你这样做,抱歉无法提供更多有用的信息。
祝你好运!答案 6 :(得分:0)
NSNull
单例可用于构建“交错”数组,如obj0,obj1,obj2,NSNull,obj3,NSNull,...,nil。
警告:'NSArray'可能不会回应 to'-objectForKey:“
NSArray未实施objectForKey
您的代码将在运行时崩溃(如果已分配并初始化clientDataArray
)
您可以通过索引(objectAtIndex:)访问数组元素
如果您需要将对象与键关联,请查看NSDictionary。
答案 7 :(得分:0)
if(temp!= nil)
或者因为nil等于0,你也可以这样做:
if(temp)
我不是想象中的Obj-C或Cocoa专家,在C / C ++中你可以使用类似的东西:
if(somePtr!= NULL)
并且,除非您明确地将其设置为NULL或更改它指向的内容, 事实上,你可以确定它是非空的或无效的(无论你在寻找什么......)
但是我已经注意到了(无论如何我的个人经历)在Obj-C中,
如果您执行以下操作: 如果(someObj!= nil)或反过来,
没有保证,它会告诉你它的真实状态......
所以(在处理一堆崩溃之后)当我处理Obj-C(BS)时,为了安全起见,我总是设置一个BOOL或标志来跟踪它的状态,所以你最终不会自由-ing,对不起......“发布”已经解除分配的东西......
答案 8 :(得分:0)
尽管这个问题已经过时了,但我希望我的答案会帮助其他人。
你可以试试这个
temp = [clientDataArray objectForKey:@"ClientCompany"];
if (![temp isKindOfClass:[NSNull class]]) infofieldCompany.text = temp;