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

13

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

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

目前我已经通过以上代码实现了这个功能,但是它给了我警告

  • 警告:NSArray 可能无法响应 -objectForKey:
  • 警告:不同的 Objective-C 类型 struct NSNull *struct NSString *的比较缺少转换

我的主要兴趣在于第二个警告,但第一个警告也引起了我的注意。 我该如何修改我的代码以解决这些警告?


clientDataArray 实际上是一个 NSDictionary,但被声明为数组,因此出现了警告。 - oberbaum
9个回答

20

你的第一个警告看起来像是尝试在NSArray上调用objectForKey。这是行不通的,因为NSArray没有objectForKey方法。

至于第二个警告,你可以直接与nil进行比较,例如:

if (temp != nil)

或者,由于nil等同于0,你也可以这样做:

if (temp)

是的,我应该这样做。而且很简单易懂。 我发表的第一行确实可以正常工作,但我会重新考虑它。 - oberbaum
请注意,如果temp是NSString类型,则此方法无效。请使用Robinsons的答案。 - Abramodj

17
尝试过所有选项后,我认为这是比较NSString null的最佳选择。
if ( temp != ( NSString *) [ NSNull null ] )
{
  // do some thing
}

这种写法相比于 temp != nil 有什么优势? - Matt

14

之前给出的两个答案都忽略了一个基本点:你不能把nil放进数组里,所以你永远不会从数组中得到nil。然而,在数组中使用NSNull作为占位符是正确的做法,但是你的变量temp不能声明为NSString *,因为它可能不是一个字符串。使用NSObject *id作为变量类型来抑制比较警告。


3
或者,执行[string isEqual:[NSNull null]]。 (注:这是一行Objective-C代码,意思是判断字符串变量是否为null) - Rik Smith-Unna

2

测试NULL或空值的最佳解决方案:

if (yourObj.yourString == (NSString*) [NSNull null] || yourObj.yourString.length == 0 )
{
   yourObj.yourString = @"";
}

1
相当简单
if (myString == nil){
     NSLog(@"myString is null");
}

0

我认为问题所在(我的意思是第二个警告)是你正在比较可能设置为 null 的 NSString 对象和一个 NSNull 对象。

你试过通常用于检查 null 的 C 方式吗?

if(temp) {
// It's not null, do something.
}

我不是100%确定这个,但你可以试试看。如果你试了,很抱歉我不能提供更多有用的信息。

祝你好运!


0
尽管这个问题很旧,但我希望我的回答能帮助其他人。
你可以尝试这个。
temp = [clientDataArray objectForKey:@"ClientCompany"];
if (![temp isKindOfClass:[NSNull class]]) infofieldCompany.text = temp;

0
如果(temp!= nil)
或者,由于nil等同于0,您也可以这样做:
如果(temp)
我绝不是Obj-C或Cocoa专家,在C / C ++中,您可以使用类似于:
如果(somePtr!= NULL)
并且,除非您明确将其设置为NULL或更改了它指向的内容, 您可以确定它实际上不是Null或Null(无论您正在寻找什么...)
但是我已经注意到(我的个人经验),在Obj-C中,
如果您这样做: 如果(someObj!= nil)或相反,
不能保证它会告诉您它的真实状态...
因此(在处理一堆崩溃后),当我处理Obj-C(BS)时,为了安全起见,我总是设置一个BOOL或标志来跟踪它的状态,以便您不会释放已经被释放的东西...

0

NSNull 单例可用于构建“交错”数组,例如 obj0,obj1,obj2,NSNull,obj3,NSNull,...,nil。

警告:'NSArray' 可能无法回应'-objectForKey:'

NSArray 没有实现 objectForKey
如果已分配和初始化 clientDataArray,则您的代码将在运行时崩溃。您可以通过索引(objectAtIndex:)访问数组元素。
如果需要将对象与键关联,请查看 NSDictionary


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接