简体   繁体   中英

UIbutton deallocated in custom UITableViewCell

Using ARC (Automatic Reference Counting), I have a UIButton in a subclassed UITableViewCell . The table view controller implements the IBAction which is hooked up to the UIButton . In the subclassed cell's xib, the same table view controller is the File's Owner.

The problem occurs when I run the app and click on the button, I get an EXC_BAD_ACCESS . It's clearly visible on the iPhone screen, so it is being allocated at some point.

Any idea what the problem could be? Thanks in advance!

EDIT1:
Note: I have env variable NSZombieEnabled set to true. Here's the console:

2011-10-31 22:22:08.653 MyApp[7176:fb03] *** -[NSObject performSelector:withObject:withObject:]: message sent to deallocated instance 0x6b94d40
(lldb) thread backtrace
* thread #1: tid = 0x1f03, 0x014c3e1e CoreFoundation`___forwarding___ + 206, stop reason = EXC_BREAKPOINT (code=EXC_I386_BPT, subcode=0x0)
frame #0: 0x014c3e1e CoreFoundation`___forwarding___ + 206
frame #1: 0x014c3ce2 CoreFoundation`_CF_forwarding_prep_0 + 50
frame #2: 0x001e45c2 UIKit`-[UIApplication sendAction:to:from:forEvent:] + 96
frame #3: 0x001e455a UIKit`-[UIApplication sendAction:toTarget:fromSender:forEvent:] + 61
frame #4: 0x00289b76 UIKit`-[UIControl sendAction:to:forEvent:] + 66
frame #5: 0x0028a03f UIKit`-[UIControl(Internal) _sendActionsForEvents:withEvent:] + 503
frame #6: 0x002892fe UIKit`-[UIControl touchesEnded:withEvent:] + 549
frame #7: 0x004a2a2a UIKit`_UIGestureRecognizerUpdate + 6725
frame #8: 0x015319ce CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 30
frame #9: 0x014c8670 CoreFoundation`__CFRunLoopDoObservers + 384
frame #10: 0x014944f6 CoreFoundation`__CFRunLoopRun + 1174
frame #11: 0x01493db4 CoreFoundation`CFRunLoopRunSpecific + 212
frame #12: 0x01493ccb CoreFoundation`CFRunLoopRunInMode + 123
frame #13: 0x02449879 GraphicsServices`GSEventRunModal + 207
frame #14: 0x0244993e GraphicsServices`GSEventRun + 114
frame #15: 0x001e1a9b UIKit`UIApplicationMain + 1175
frame #16: 0x0000278d MyApp`main + 125 at main.m:14
frame #17: 0x00001ff5 MyApp`start + 53

Figured it out. I was using UINib 's instantiateWithOwner: options: to load the nib of the custom UITableViewCell . I was setting the owner to nil . Setting the owner to my view controller fixed it. Also, my view controller is the File's Owner of that UITableViewCell nib. I'm guessing because the view controller and nib were not properly linked, ARC did not see a reason to keep the view around.

I am not sure but I have a feeling your problem is in the selector you are passing to the button.

Try to see if you are using a selector with ":" to a method with out parameters.

If you are using selector that looks like this:

@selector(method:)

Then is is expected that "method" will take parameters:

-(IBAction)method:(UIButton)sender{
}

if your function is not taking any parameters:

-(IBAction)method{
}

then your selector should look like that:

@selector(method)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM