2010-08-11 49 views
5

我得到這個奇怪的問題測試空(或空)文本屬性。 這裏我的設置:我買了它6文本框,在這裏我用走通的領域(在NSMutable裝陣)的代碼視圖...UITextField:測試文本屬性爲空字符串或零或空不起作用

NSEnumerator *portsEnumerator = [appliancePorts objectEnumerator]; 
UITextField *tmpField; 
newSite.port = [NSMutableArray array]; 
while (tmpField =[portsEnumerator nextObject]) { 
    NSLog(@"value:%@",tmpField.text); 
    if (![tmpField.text isEqualToString:nil]) { 
     [newSite.port addObject:(NSString *)tmpField.text]; 
    } 
} 

當我在這個界面和請在頭兩個領域的一些文本和「公正」的標籤,其剩餘的領域和它的「完成」按鈕,這是我從GDB輸出了:

2010-08-10 20:16:54.489 myApp[4883:207] value:Value 1 

2010-08-10 20:16:58.115 myApp[4883:207] value:Value 2 

2010-08-10 20:17:02.002 myApp[4883:207] value: 

2010-08-10 20:17:13.034 myApp[4883:207] value: 

2010-08-10 20:17:15.854 myApp[4883:207] value: 

2010-08-10 20:17:17.762 myApp[4883:207] value: 

我知道,如果我測試空字符串它應該工作因爲轉儲到控制檯時的文本屬性顯示:

UITextField: 0x5d552a0; frame = (20 8; 260 30); text = ''; clipsToBounds = YES; opaque = NO; tag = 1; layer = CALayer: 0x5d54f20 

但是,當我返回視圖時,REAL問題開始,在相同的前兩個字段中輸入一些文本,並且緊跟其後的「完成」按鈕(不通過另一個字段,因此它們沒有獲得任何焦點)。這又是GDB輸出...

2010-08-10 20:23:27.902 myApp[4914:207] value:Value 1 

2010-08-10 20:23:31.739 myApp[4914:207] value:Value 2 

2010-08-10 20:23:34.523 myApp[4914:207] value:(null) 

2010-08-10 20:23:56.443對myApp [4914:207] *終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因是:「* - [NSMutableArray的insertObject:atIndex:]:嘗試在2' 插入無對象

所以,顯而易見的問題是,第一isEqualtoString:nil不工作,第二,是怎麼來的這個文本改變'以只是將重點放在該領域的問題上。

那麼,有沒有更好的方法來測試空場?

謝謝!

+0

如果您使用UITextView然後http://stackoverflow.com/a/8238742/1660139 – Haider 2012-12-14 13:22:43

+0

如果您使用UITextView那麼這個鏈接將有助於http://stackoverflow.com/a/8238742/1660139 – Haider 2012-12-14 13:23:10

回答

21

我傾向於使用

if (![tmpField.text length]) 

這將錯過它,如果它nil或者@ 「」。即它找到了字符串的長度,如果它是0(如果字符串是空的或零的話就是這種情況),它不執行IF命令。

+0

+1 - 更好的方法 – jrtc27 2010-08-11 06:35:24

+0

這項工作,除了在開始否定。刪除它,它適用於''或空字符串。謝謝!但是,我仍然想知道爲什麼把焦點放在文本字段上的變化是文本值從null到''?!? – 2010-08-11 12:38:06

3

如何

if (![tmpField.text isEqualToString:@""]) 
  • ,對於一個空字符串,而不是一個零字符串測試。

還有很多其他的方法,包括測試字符串的長度。注意,如果tmpField.text沒有問題,可以將消息發送給nil對象,所以如果tmpField.text爲零,那麼測試會成功(並且在嘗試向數組中添加nil對象時會崩潰) - 但是您想要的測試是向NSString對象發送一條消息,詢問它是否爲空。

+0

這將工作只有當字段得到焦點,因爲它得到一個''字符串。但是,如果該領域沒有得到重點,那麼你得到一個空值,這個測試失敗。 – 2010-08-11 12:36:03

相關問題