2012-04-01 42 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文本。我在文本設置前檢查了一個空字符串,因此每次都顯示爲空。現在,我在設置文本字段後放置了代碼,它的作用就像一個魅力。