2013-01-02 48 views
0

我在使用NSViewreplaceSubview:with:方法更換不同視圖時遇到問題。當調用方法時,舊視圖被釋放,文檔狀態爲replaceSubview:with和ARC正在釋放舊視圖

此方法會導致釋放舊視圖;如果您打算重複使用它,請在發送此消息之前確保保留它,並在將它作爲另一個NSView的子視圖添加時將其釋放爲 。

但是,使用自動引用計數(ARC)時,不能發送保留消息。文檔是否需要更新?如何在ARC中使用此方法?

我交換的視圖都存在於同一個筆尖,我沒有不同的視圖控制器。交換視圖並存儲它們以備後用的首選方式是什麼?

+0

舊視圖發佈的含義是什麼? – trojanfoe

+0

因爲視圖是從筆尖加載的,所以我不擁有它們。調用該方法可釋放由筆尖「擁有」的對象。 –

回答

2

首先存儲舊視圖,以便稍後在強變量中使用,然後將其交換出來以防止它被釋放。

+0

可以讓IBOutlet成爲__strong變量嗎?這確實解決了這個問題。另一種解決方案:我添加了一個NSMutableArray實例變量,並將__weak IBOutlet實例變量添加到數組中,這使ARC增加了保留數+1。 –

+0

是的。有些問題需要考慮。確保你沒有任何保留週期,並確保設置的東西在你的dealloc中設置爲零。 –

+0

最後我解決了實際的解決方案:使用NSViewController來管理視圖。我將視圖控制器和屬性添加到我的AppController,而不是將視圖添加爲IBOutlet。 –