2010-08-23 25 views
1

我在我的應用程序中有這個代碼,我把文本字段文本放在我的NSString屬性中。Iphone TextField.text

iname = textField.text;

後,在某些時候IM這樣做是爲了確保該字符串不爲空

[INAME isEqualToString:@ 「」]

的問題是,如果文本框包含一個沒有空格的單詞它的效果很好 如果有空間崩潰!我不明白爲什麼?

請幫忙!非常感謝你

+0

它在哪裏崩潰?在從文本字段中檢索字符串或比較字符串與空的? – 2010-08-23 09:04:09

+0

它與一個空字符串比較字符串時崩潰 – 2010-08-23 09:07:13

+0

這應該沒有問題。在比較之前,您可以打印出來嗎?我懷疑它不知何故 – vodkhang 2010-08-23 09:13:44

回答

1

使用吸氣劑妥善解決問題

self.iname =的TextField.text;

+1

你明白爲什麼發生問題嗎?當你寫'iname = @「something」;'那麼你不使用該屬性並且不保留字符串。我想財產保留對象(「保留」或「複製」)。這樣,一旦你改變了'self.iname = textField.text;'你保留了字符串,並且在那之前該字符串被自動釋放。因此,當您嘗試比較它時,該對象已經被釋放... – 2010-08-23 20:37:52

1
iname = textField.text; 

iname是一個實例變量,對不對?如果是這樣,則需要對此字符串進行共同擁有,以便在文本字段停止擁有該字符串時該字符串不會死亡(如果包括用戶在內的任何內容將文本字段的值替換爲新的text值 - 一個新的字符串)。簡單地將字符串的指針分配給其中一個實例變量不會取得字符串的所有權。有關更多信息,請參閱the Memory Management Programming Guide for Cocoa Touch

如果你不這樣做,那麼當你試圖發送一條消息到你在iname指針的現在已經死了的對象時,你的程序會崩潰。

後,在某些時候IM這樣做是爲了確保該字符串不爲空

[iname isEqualToString:@""] 

...例如。

問題是,如果文本字段包含一個沒有空格的單詞,它會很好地工作,如果有空間它崩潰!

有時可能會有一個隨機性元素,以確定崩潰是否顯現。

證明我的理論的方法是在Instruments的殭屍工具下運行您的應用程序。該樂器使沒有所有者的物體不會死亡(被釋放),而是成爲殭屍。當您向殭屍發送消息時,您將在樂器時間軸中獲得一個標誌,您可以使用該標誌檢查該對象及其歷史記錄,以便在它應該有/爲什麼還握住它之前找出其死亡原因死後。

相關問題