2009-09-04 5 views
0

J'ai reçu un rapport de plantage d'un testeur bêta et j'ai de la difficulté à identifier la racine du problème. Il est clair que quelque chose s'est mal passé lorsque vous essayez de définir un UIButton (screenOverlay). Voici sa création en viewDidLoad:Comment lire un rapport de plantage à partir de l'iPhone

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]; 

Chose étrange est cet accident a eu lieu bien après vue a été chargé ... peut-être viewDidLoad était appelé à nouveau que le clavier a été déplacé hors-champ? Quoi qu'il en soit, les anciens combattants ont quelques mots de sagesse sur la façon d'aborder ces choses quand vous les obtenez?

Voici la trace de la pile. Heureux de télécharger le repos si vous le trouveriez utile.

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 
+0

Comment screenOverlay est-il défini? Comment est-il défini en tant que propriété de ItemizeViewController? – executor21

+0

@property (nonatomic, retain) UIButton * screenOverlay; – Meltemi

Répondre

4

À partir du code ci-dessus, im voir les éléments suivants

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 

puis vous appelez, maintenant cela pourrait être la cause de votre problème [bouton release], la méthode clas que vous avez appelé ne conserve pas l'objet parce qu'il est autoreleased, donc vous appelez release sur l'objet, plus tard quand il essaye de le libérer vous obtenez le crash ... à peu près sûr que c'est votre problème ... remove [release buttom] et vous devriez être ok, ceci est fondamentalement un problème de sur-libération

+0

En effet! Que je suis bête. Bizarre cependant, car il ne s'est écrasé que toutes les 20 utilisations ... La plupart de mes problèmes de relâchement provoquent une explosion immédiate! merci pour votre aide! – Meltemi

Questions connexes