2009-10-29 82 views
7

我有一個UIViewController,我從xib文件加載並推入導航控制器堆棧。將UILabel連接到IBOutlet導致崩潰

在該視圖控制器頭文件,我有:

IBOutlet UILabel *myTitle; 

我不與代碼「myTitle」,但做任何事情;我剛剛建立了連接。

當我編譯並運行應用程序,並且在xib文件中沒有定義標籤(因此沒有任何附加到IBOutlet的標籤)時,它可以工作。視圖控制器可以動態地查看視圖,顯示我在「界面」構建器中構建的視圖。

如果我在界面構建器中爲xib添加標籤,但不將其連接到插座,然後重新編譯,它仍然有效,並顯示帶有我爲其輸入的默認文本的標籤。

但是,如果我將IBOutlet myTitle連接到界面構建器中的標籤,重新編譯並運行應用程序,它會正常工作,直到我嘗試將視圖控制器推到導航控制器的堆棧上,此時我發生崩潰:

*** -[UILabel copyWithZone:]: unrecognized selector sent to instance 0x4558e20 

如果我再次斷開插座,它將恢復工作,顯示靜態標籤。當視圖顯示時,看起來有些奇怪,因爲當我將視圖推到導航堆棧上時發生崩潰。

我不應該添加一個IBOutlet到UILabel或什麼?或者還有其他事情正在發生?任何關於在哪裏尋找麻煩的建議?

回答

6

您是否爲IBOutlet創建了訪問器?

@property (assign) IBOutlet UILabel *myTitle; 

,然後在你的.m文件

@synthesize myTitle 
+0

我有一個相同的問題,我創建了一個訪問器。如果我設置了一個斷點,它甚至在我到達第一行代碼之前就爆發了。在我的情況下,問題出現在第一個(唯一)視圖控制器中。 – Andiih 2009-11-13 09:48:09

9

是的,它可能被錯誤的PARAM名稱,例如引起試試這個:

IBOutlet UILabel title; 

,它會調用一個異常這樣的:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UILabel copyWithZone:]: unrecognized selector sent to instance 0x143f520' 
+5

我試圖調用IBOutlet'標題'時遇到此問題。如果我將它改名爲theTitle,那麼一切都很好。大概你必須小心你的變量名稱以避免衝突。 – 2011-03-11 18:18:30

+2

事實上 - 'title'是保留的,並且沒有很好的錯誤標記讓你知道你已經在UIView內部定義了腳步。這一個讓我今晚有一段時間難倒了。 – radven 2011-07-19 09:44:33

+0

因爲大聲哭鬧,我也一直被困在這個年齡段,謝謝! – 2012-01-04 02:01:03

5

我有同樣的問題。原來*標題是保留的,Xcode不會告訴你這一點。一旦我將它重命名爲其他的工作。

1

在我的情況下,我在UIToolBar中有一個UILabel。對我來說固定的是刪除toolBar並添加一個新的UILabel。一個IB錯誤。