views:

634

answers:

1

Got a crash report from a beta tester and I'm having trouble identifying the root of the problem. Clearly something went wrong when trying to set a UIButton (screenOverlay). Here's its creation in ViewDidLoad:

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
button.backgroundColor = [UIColor blackColor];
button.alpha = 0.0;
button.hidden = YES;
[button addTarget:self.noteView action:@selector(backgroundClicked:) forControlEvents:UIControlEventTouchUpInside];
self.screenOverlay = button;
[self.view addSubview:screenOverlay];
[button release];

Strange thing is this crash occurred well after view was loaded...perhaps viewDidLoad was being called again as the keyboard was being moved offscreen? Anyway, any veterans out there have some words of wisdom on how to approach these things when you get them?

Here's the stack trace. Happy to upload rest if you'd find it valuable.

    Date/Time:       2009-09-04 08:42:05.341 -0700
    OS Version:      iPhone OS 3.0.1 (7A400)
    Report Version:  104

    Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
    Exception Codes: KERN_INVALID_ADDRESS at 0x80000408
    Crashed Thread:  0

    Thread 0 Crashed:
    0   libobjc.A.dylib  0x30011960 objc_msgSend + 52
    1   libobjc.A.dylib  0x3001313c objc_setProperty + 160
    2   MyApp            0x00003258 -[ItemizeViewController setScreenOverlay:] (ItemizeViewController.m:24)
    3   MyApp            0x00003920 -[ItemizeViewController viewDidLoad] (ItemizeViewController.m:229)
    4   UIKit            0x3093d5e4 -[UIViewController view] + 152
    5   UIKit            0x30a56d84 -[UIViewController contentScrollView] + 24
    6   UIKit            0x30973ee0 -[UINavigationController _startTransition:fromViewController:toViewController:] + 180
    7   UIKit            0x30973d90 -[UINavigationController _startDeferredTransitionIfNeeded] + 256
    8   UIKit            0x309a7468 -[UINavigationController _popViewControllerWithTransition:allowPoppingLast:] + 400
    9   UIKit            0x309a72c8 -[UINavigationController popViewControllerAnimated:] + 32
    10  UIKit            0x309a7a0c -[UINavigationController navigationBar:shouldPopItem:] + 132
    11  UIKit            0x309a77e8 -[UINavigationBar popNavigationItemAnimated:] + 184
    12  UIKit            0x30a3667c -[UINavigationBar _handleMouseUpAtPoint:] + 536
    13  UIKit            0x30a34f64 -[UINavigationBar touchesEnded:withEvent:] + 84
    14  UIKit            0x309a60d4 -[UIWindow _sendTouchesForEvent:] + 520
    15  UIKit            0x309a5464 -[UIWindow sendEvent:] + 108
    16  UIKit            0x30936e3c -[UIApplication sendEvent:] + 400
    17  UIKit            0x30936874 _UIApplicationHandleEvent + 4336
    18  GraphicsServices 0x32046964 PurpleEventCallback + 1028
    19  CoreFoundation   0x30254a70 CFRunLoopRunSpecific + 2296
    20  CoreFoundation   0x30254164 CFRunLoopRunInMode + 44
    21  GraphicsServices 0x3204529c GSEventRunModal + 188
    22  UIKit            0x308f0374 -[UIApplication _run] + 552
    23  UIKit            0x308eea8c UIApplicationMain + 960
    24  MyApp            0x00002090 main (main.m:14)
    25  MyApp            0x0000202c start + 44

Thread 1:
0   libSystem.B.dylib               0x31d47158 mach_msg_trap + 20
1   libSystem.B.dylib               0x31d49ed8 mach_msg + 60
2   CoreFoundation                  0x3025454e CFRunLoopRunSpecific + 982
3   CoreFoundation                  0x30254164 CFRunLoopRunInMode + 44
4   WebCore                         0x3588dbc8 RunWebThread(void*) + 412
5   libSystem.B.dylib               0x31d705a0 _pthread_body + 20

Thread 0 crashed with ARM Thread State:
    r0: 0x0018e4e0    r1: 0x300991c4      r2: 0x43a00000      r3: 0x00001108
    r4: 0x80000408    r5: 0x00000001      r6: 0x00000000      r7: 0x2fffeb94
    r8: 0x43a00000    r9: 0x001fc098     r10: 0x301038dc     r11: 0x30082134
    ip: 0x381fd03c    sp: 0x2fffeb74      lr: 0x30013144      pc: 0x30011960
  cpsr: 0xa0000010
+2  A: 

From the code above, im seeing the following

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

and then you are calling [button release], now this might be causing your problem, the clas method that you called does NOT retain the object because it is autoreleased, so you are calling release on the object, later when it tries to autorelease it you get the crash...pretty sure thats your problem...remove [buttom release] and you should be ok, this is basically an over release problem

Daniel
Indeed! Silly me. Weird one though as it only crashed every 20 or so uses... Most of my over release problems result in an immediate explosion! thx for your help!
Meltemi