2010-11-19 3 views
2

Ok, donc cela m'a complètement perplexe tout comme le gars here avec le problème exact.sélecteur non reconnu envoyé à l'instance. Méthode étant appelée pour les objets aléatoires

J'ai un UITableView avec quelques lignes dans un contrôleur de vue qui prend en charge autorotation et parfois, si je Basculez le téléphone, je reçois « EXC_BAD_ACCESS » et parfois je reçois SIGABRT avec une trace de la pile comme:

2010-11-19 16:51:05.634 [2306:307] -[CABasicAnimation numberOfSectionsInTableView:]: unrecognized selector sent to instance 0x58207d0 
2010-11-19 16:51:05.688 [2306:307] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[CABasicAnimation numberOfSectionsInTableView:]: unrecognized selector sent to instance 0x58207d0' 
*** Call stack at first throw: 
(
0 CoreFoundation      0x344aaed3 __exceptionPreprocess + 114 
1 libobjc.A.dylib      0x33975811 objc_exception_throw + 24 
2 CoreFoundation      0x344ac683 -[NSObject(NSObject) doesNotRecognizeSelector:] + 102 
3 CoreFoundation      0x344541d9 ___forwarding___ + 508 
4 CoreFoundation      0x34453f90 _CF_forwarding_prep_0 + 48 
5 UIKit        0x31b20717 -[UITableViewRowData(UITableViewRowDataPrivate) _updateNumSections] + 66 
6 UIKit        0x31b20677 -[UITableViewRowData invalidateAllSections] + 50 
7 UIKit        0x31b2048d -[UITableView(_UITableViewPrivate) _updateRowData] + 64 
8 UIKit        0x31b22941 -[UITableView(_UITableViewPrivate) _ensureRowDataIsLoaded] + 24 
9 UIKit        0x31b22909 -[UITableView numberOfSections] + 16 
10 UIKit        0x31bd114f -[UISearchDisplayController _updateNoSearchResultsMessageVisiblity] + 54 
11 UIKit        0x31cfbef7 -[UISearchDisplayController windowWillAnimateRotation:] + 478 
12 Foundation       0x3325d6b3 _nsnote_callback + 142 
13 CoreFoundation      0x34431713 __CFXNotificationPost_old + 402 
14 CoreFoundation      0x344313b3 _CFXNotificationPostNotification + 118 
15 Foundation       0x3324cdb7 -[NSNotificationCenter postNotificationName:object:userInfo:] + 70 
16 UIKit        0x31b5dbb7 -[UIWindow _setRotatableClient:toOrientation:duration:force:] + 3114 
17 UIKit        0x31b64013 -[UIWindow _setRotatableViewOrientation:duration:force:] + 50 
18 UIKit        0x31b39a0f -[UIWindow _updateToInterfaceOrientation:duration:force:] + 74 
19 UIKit        0x31b39be9 -[UIWindow _updateInterfaceOrientationFromDeviceOrientation:] + 112 
20 UIKit        0x31b39b15 -[UIWindow _handleDeviceOrientationChange:] + 88 
21 Foundation       0x3325d6b3 _nsnote_callback + 142 
22 CoreFoundation      0x34431713 __CFXNotificationPost_old + 402 
23 CoreFoundation      0x344313b3 _CFXNotificationPostNotification + 118 
24 Foundation       0x3324cdb7 -[NSNotificationCenter postNotificationName:object:userInfo:] + 70 
25 UIKit        0x31b0d0ed -[UIDevice setOrientation:animated:] + 144 
26 UIKit        0x31b2a51b -[UIApplication handleEvent:withNewEvent:] + 2738 
27 UIKit        0x31b29901 -[UIApplication sendEvent:] + 44 
28 UIKit        0x31b29337 _UIApplicationHandleEvent + 5110 
29 GraphicsServices     0x3026c04b PurpleEventCallback + 666 
30 CoreFoundation      0x3443fce3 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 26 
31 CoreFoundation      0x3443fca7 __CFRunLoopDoSource1 + 166 
32 CoreFoundation      0x3443256d __CFRunLoopRun + 520 
33 CoreFoundation      0x34432277 CFRunLoopRunSpecific + 230 
34 CoreFoundation      0x3443217f CFRunLoopRunInMode + 58 
35 GraphicsServices     0x3026b5f3 GSEventRunModal + 114 
36 GraphicsServices     0x3026b69f GSEventRun + 62 
37 UIKit        0x31ad-[UIApplication _run] + 402 
38 UIKit        0x31ace12f UIApplicationMain + 670 
39 App         0x0000285f main + 70 
40 App       0x00002814 start + 40 
) 
terminate called after throwing an instance of 'NSException' 
Program received signal: “SIGABRT”. 

Dans ce cas, il s'agit de CABasicAnimation sur lequel numberOfSectionsInTableView est appelé, mais parfois il y a des noms de classe comme NSMachPort dont je n'ai jamais entendu parler. En outre, la méthode appelée numberOfSectionsInTableView reste la même avec les noms de classe qui changent pour toujours donner une exception doesNotRecognizeSelector.

Ce problème ne se produit également que lorsque j'essaie de faire pivoter l'appareil. Chaque fois que je reçois une trace de pile comme ci-dessus, il y a toutes les fonctions du système qui rendent difficile le débogage.

Vraiment besoin de conseils d'experts à ce sujet. Veuillez lire le forum mentionné ci-dessus pour être clair sur le problème.

Répondre

1

Commencez par activer NSZombies. Ce que cela donne, c'est que vous relâchez trop un objet.

2

Whoa! Je pensais que je connaissais suffisamment NSZombies mais j'avais tort!

Je permis NSZombies qui m'a amené à:

*** -[ContactsViewController numberOfSectionsInTableView:]: message sent to deallocated instance 0x88dafa0 

Faire « po 0x88dafa0 » ne fonctionnera pas parce que la mémoire de cet objet a déjà été libéré.

Un peu plus Googling m'a conduit à this où l'auteur décrit comment trouver des objets libérés/libérés. Il suffit de définir MallocStackLoggingNoCompact sur 1 dans les Variables à définir dans l'environnement avec NSZombieEnabled.

La sortie i obtenu avec la commande info malloc-history 0xf270740 avait une ligne:

-[VoicePlayController actionSheet:clickedButtonAtIndex:] at /Users/Documents/Xcode Projects/Classes/VoicePlayController.m:454 

Le code de cette ligne est la suivante:

contactsViewController = [[ContactsViewController alloc] initWithNibName:@"ContactsViewController" bundle:nil]; 

I déplacé la ligne [contactsViewController release];-dealloc procédé au lieu d'immédiatement après [self.navigationController presentModalViewController:contactsViewController animated:YES]; et le problème est parti!

Questions connexes