我有一个tabe视图,其中包含在不同的笔尖中创建的自定义单元格。在每个单元格中,我都有一个按钮。我不想处理我创建的一个对象中的按钮按下事件(我称之为PlaylistController
)。在IB中,我将此类(PlaylistController
)添加为对象,然后将Touch Up Inside
动作拖动到IB中的对象表示,并在按下按钮时实现简单警报。但是当我按下模拟器上的按钮时,我得到了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];
我该怎么做?
感谢。
答案 0 :(得分:2)
正如我所担心的那样:你的接收物体已从你身下直接释放出来,原因很明显:它没有强烈存放。 IB真诚地相信你有能力保留你以后在代码中引用的顶级对象。当XIB被解压缩,并且您发布的对象没有所有者(在原始NSCoder之外)时,自然会假设它可以被释放而没有后果。当然,问题在于IB已经将对象绑定到按钮的动作上。所以,当按钮调出对象时,BOOM!只需添加一个表示对象的IBOutlet前缀属性,它就应该自行清除。