2013-03-03 125 views
-3

我有一個tabe視圖與自定義單元格創建在不同的筆尖,在每個單元格我有一個按鈕。我不想處理我創建的一個對象中的按鈕按下事件(我稱之爲PlaylistController)。在IB中,我添加了這個類(PlaylistController)作爲Object,然後將Touch Up Inside動作拖動到IB中的對象表示中,並在按下按鈕時實現了一個簡單的警報。但是當我按下模擬器上的按鈕時,我得到了EXC_BAD_ACCESS;我的堆棧跟蹤:iOS:EXC_BAD_ACCESS當按下按鈕

Thread 1, Queue : com.apple.main-thread 
0 0x010ea09b in objc_msgSend() 
1 0x000202c0 in -[UIApplication sendAction:to:from:forEvent:]() 
6 0x002e41d3 in _UIGestureRecognizerUpdate() 
7 0x01c63afe in __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__() 
11 0x01c40e1b in CFRunLoopRunInMode() 
12 0x01bf57e3 in GSEventRunModal() 
13 0x01bf5668 in GSEventRun() 
14 0x0001cffc in UIApplicationMain() 
15 0x0000227d in main at /Users/bysdan/Documents/workspace/Starling/Starling/main.m:16 
16 0x000021a5 in start() 

P.S.
我也試圖用External Object而不是Object來做到這一點,但後來我在嘗試訪問筆尖的行中發現異常。

NSArray *nibObjs = [[NSBundle mainBundle] loadNibNamed:@"PlaylistCell" owner:nil options:nil];

我怎樣才能做到這一點?

謝謝。

+2

不良訪問的代碼是什麼,控制檯說什麼? – CodaFi 2013-03-03 08:30:26

+0

代碼1,控制檯沒有說出任何東西... – RCB 2013-03-03 08:33:19

+2

它看起來像接收器已從您的鼻子下面釋放出來。演示如何在.h(IBOutlet行)中聲明它。 – CodaFi 2013-03-03 08:36:38

回答

2

正如我擔心的那樣:您的接收對象已被直接從您的下方釋放,原因很明顯:它沒有強烈存儲。 IB真誠地承認,您有能力保留稍後在代碼中引用的頂級對象。當XIB被取消存檔時,並且您發佈的對象沒有所有者(原始NSCoder之外),那麼自然會認爲它可以被釋放而沒有任何後果。當然,問題在於IB已經將對象綁定到了按鈕的操作上。所以,當按鈕調出對象時,BOOM!只需添加一個代表對象的IBOutlet前綴屬性,它應該自行清除。