2012-06-23 19 views
0

這是一個OS X應用程序。我正在設計一個自定義表單。在我的XIB文件中,我有工作表的窗口和NSViewController的子類,它負責控制窗口/工作表中的視圖。 XIB的所有者是另一個控制器類。IBOutlet是某種NSZombie?

我在窗口的內容視圖中放置了NSTextField。在我的NSViewController中,我爲NSTextField創建了IBOutlet聲明,並確保插座在XIB中正確連接。

我覆蓋 - [NSViewController setRepresentedObject:],並在該方法中,我正在查看呈現的對象,並根據它的屬性,我要麼刪除NSTextField從它的超級視圖或我將它添加回超級視圖。

我第一次顯示帶有指示文本字段的表示對象的工作表時,應該從超級視圖中刪除。這工作得很好。

第二次我顯示我的工作表與代表文本字段應該被添加回超視圖我的應用程序與EXC_BAD_ACCESS崩潰時調用 - [NSView addSubview:]。

Running Instruments顯示NSTextField是我當時試圖將其添加回超級視圖的殭屍。工具還指出,每次保留/釋放/自動釋放的調用都由AppKit或Foundation執行 - 因此我的任何代碼都不會增加或減少保留數。實際上,在我的代碼中引用IBOutlet的唯一兩行代碼是調用 - [NSView removeFromSuperview]和 - [NSView addSubview:]。

我做錯了什麼或者這是OS X中的錯誤?除非XIB被卸載,否則IBOutlet不應該被釋放。

回答

1

很自然,當我發佈我的問題後2分鐘就知道了。

我的XIB中實際上有2個文本框,它們與問題中描述的行爲相同。只有一個textfields變成了NSZombie,這讓事情變得更加混亂。

當我在設計XIB時,我放下了一個NSTextField,配置它,然後在拖動NSTextField時按住Option複製它。我確實確認了複製的NSTextField的插口已正確設置,但由於某些原因,對象保持不變。

解決的辦法是刪除有問題的NSTextField,然後從調色板中刪除一個新的,並配置它。

+0

請向http://bugreport.apple.com提交一份描述性的錯誤報告 - 如果確實發生了這種情況,那麼這是一個Xcode錯誤,應該一定要修復。 –

+0

我想我會重複樣本項目中的問題並將其作爲錯誤提交,如果它實際上是可重現的。謝謝。 – Carter