Objective-C如何检查字符串是否为null

时间:2010-03-08 12:29:29

标签: objective-c nsstring null

SO 我想检查一下我的数组[clientDataArray objectForKey:@"ClientCompany"]中的项目是否为nil

    temp = [clientDataArray objectForKey:@"ClientCompany"];
    if (temp != [NSNull null]) infofieldCompany.text = temp;

到目前为止,我已经能够通过上面的代码实现这一点,但它确实给了我警告

  • 警告:NSArray可能无法回复-objectForKey:
  • 警告:比较明显 Objective-C类型struct NSNull * 并且struct NSString *缺少演员

我的主要兴趣是第二次警告,但第一次警告也让我感兴趣。 我该如何调整上面的代码?

9 个答案:

答案 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;