2013-03-03 80 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前缀属性,它应该自行清除。