在ViewDidLoad上检查空的NSString?

时间:2012-04-01 01:01:50

标签: iphone nsstring viewdidload

我的应用程序在启动时检查NSString是否为空,如下所示:

if ([checkfieldstring1 isEqualToString:@""]) {

    checkboxButton.hidden = YES;
}
else {

    checkboxbutton.hidden = NO;
}

但是,当有一个空字符串时,该按钮不会被隐藏。我知道这个方法在我把它作为一个按钮的IBAction挂钩时有效,但在ViewDidLoad上却没有......

4 个答案:

答案 0 :(得分:5)

在视图即将加载时检查空字符串需要检查nil字符串或空字符串,因为字符串可能尚未设置。

if (checkfieldstring1 == nil || [checkfieldstring1 length] == 0) {
    checkboxButton.hidden = YES;
} else {
    checkboxButton.hidden = NO;
}

或者,如果你像我一样这样做,并将其添加到我添加到项目中的一组常见宏中:

static inline BOOL isEmpty(id thing)) {
    return thing == nil
        || ([thing respondsToSelector:@selector(length)]
        && [(NSData *)thing length] == 0)
        || ([thing respondsToSelector:@selector(count)]
        && [(NSArray *)thing count] == 0);
}

由Wil Shipley提供http://www.wilshipley.com/blog/2005/10/pimp-my-code-interlude-free-code.html

您可以查看:

if(isEmpty(checkfieldstring1) {
    checkboxButton.hidden = YES;
} else {
    checkboxButton.hidden = NO;
}

答案 1 :(得分:3)

由于checkfieldstring1可以nil 为空(""),因此您需要检查这两种情况。

检查两者的最简单方法,因为当你向nil对象发送消息时,Objective-C只返回0就是使用length方法,如下所示:

if ([checkfieldstring1 length] == 0) {
    checkboxButton.hidden = YES;
}
else {
    checkboxbutton.hidden = NO;
}

您也可以通过分配比较结果来缩短这一点:

checkboxButton.hidden = [checkfieldstring1 length] == 0;

当你稍后阅读时,这可能不太清楚,所以我倾向于第一个例子。

答案 2 :(得分:1)

我无法相信我是如此愚蠢......为了将来的参考,在我的ViewDidLoad中,我正在设置UserDefaults文本字段的文本。我在设置文本之前检查了一个空字符串,所以每次都显示为空。现在,我在设置文本字段后放置了代码,它就像一个魅力。

答案 3 :(得分:-1)

我认为这可以帮助你试试这个 -

if(checkfieldstring1 == [NSNull null] || [checkfieldstring1 length] == 0) {
// do something
}