2012-04-01 40 views
1

我的应用程序检查是否一个NSString是空的,当它启动,就像这样:检查ViewDidLoad上的空NSString?

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

    checkboxButton.hidden = YES; 
} 
else { 

    checkboxbutton.hidden = NO; 
} 

然而,当有一个空字符串,按钮没有被隐藏。我知道这种方法工作时,我把它作为一个IBAction钩到一个按钮,但不是在ViewDidLoad ...

+1

在if ...行上放置一个断点并检查checkfieldstring1。它可能是零? – tassinari 2012-04-01 01:23:57

+0

或者把NSLog放在那里。 – 2012-04-01 02:21:43

+0

将代码从'viewDidLoad'移到'viewWillAppear:'并重试。我认为这是一个问题,因为在viewDidLoad完全执行之前,有些变量是'nil'。让我知道它是否对你有帮助。 – 2012-04-01 17:56:12

回答

5

当视图即将加载时检查一个空字符串需要检查一个零字符串或空因为字符串可能尚未设置。

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); 
} 

威尔礼貌的希普利http://www.wilshipley.com/blog/2005/10/pimp-my-code-interlude-free-code.html

你可以只请检查:

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

这仍然无法正常工作...现在无论按钮是否为空,该按钮都是隐藏的。 – user1205856 2012-04-01 01:49:52

+0

这不起作用,因为上面的代码在测试之前将'checkfieldstring1'设置为'nil'。将“=”更改为“==”。 – 2012-04-01 02:22:48

+0

我已经试过了,仍然没有。 – user1205856 2012-04-01 03:28:04

3

由于checkfieldstring1可以是nil空("")您需要检查两种情况。

检查两个最简单的方法,因为Objective-C的简单的返回0,当你发送消息给nil对象是使用长度的方法,这样,而是:

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

您也可以缩短这仅通过分配比较的结果:

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

,当你以后虽然看完这可能不是很清晰,所以我倾向于第一个例子。

-1

我觉得这可能有助于你试试这个 -

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

NSString实例永远不会等于[NSNull null] - 它可以是最多的是一个简单的零或NULL。 -1。 – 2012-07-17 20:23:40

1

我简直不敢相信我是如此愚蠢的......对于未来的参考,在我viewDidLoad中,我设置文本字段从UserDefaults文本。我在文本设置前检查了一个空字符串,因此每次都显示为空。现在,我在设置文本字段后放置了代码,它的作用就像一个魅力。