-3

我有一个带有自定义单元格的标签视图,这些单元格是在不同的笔尖中创建的,在每个单元格中我都有一个按钮。我不想处理我创建的一个对象(我称之为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 ()

PS
我也尝试过使用External Object而不是这样做,Object但是在我尝试访问笔尖的行中出现异常。

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

我怎样才能做到这一点?

谢谢。

4

1 回答 1

2

就像我担心的那样:您的接收对象已直接从您下方释放,原因很明显:它没有被强存储。IB 坚信您有勇气保留稍后在代码中引用的顶级对象。当 XIB 被取消归档,并且您发布的对象没有所有者(在原始 NSCoder 之外)时,自然会假设它可以被释放而不会产生任何后果。当然,问题在于 IB 已经将对象绑定到按钮的操作。因此,当按钮呼唤对象时,BOOM!只需添加一个表示对象的以 IBOutlet 为前缀的属性,它就会自行清除。

于 2013-03-03T08:46:13.860 回答