2010-11-19 5 views
2

Ok, also das hat mich völlig ratlos genau wie der Typ here mit dem genauen Problem.unerkannter Selektor an Instanz gesendet. Methode aufgerufen für zufällige Objekte

Ich habe ein UITableView mit einigen Zeilen in einem View-Controller, die Autorotation und manchmal unterstützt, wenn ich das Telefon drehen, i "EXC_BAD_ACCESS" und manchmal bekomme ich SIGABRT mit einem Stack-Trace wie:

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”. 

In diesem Fall ist es CABasicAnimation auf dem numberOfSectionsInTableView aufgerufen wird, aber manchmal gibt es Klassennamen wie NSMachPort, von denen ich noch nie gehört habe. Außerdem bleibt die Methode mit dem Namen numberOfSectionsInTableView die gleiche, wobei sich die Klassennamen ändern, um immer eine doesNotRecognizeSelector Ausnahme zu geben.

Auch dieses Problem tritt nur auf, wenn ich versuche, das Gerät zu drehen. Immer wenn ich einen Stack-Trace wie oben bekomme, gibt es alle Systemfunktionen, die das Debuggen erschweren.

Wirklich brauchen einige Expertenrat zu diesem Thema. Bitte lesen Sie das oben genannte Forum, um sich über das Problem zu informieren.

Antwort

1

Beginnen Sie mit der Aktivierung von NSZombies. Wie es klingt, ist, dass Sie ein Objekt zu viel freigeben.

2

Whoa! Ich dachte, ich kannte NSZombies genug, aber ich lag falsch!

I aktiviert NSZombies, die mich geführt:

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

Doing "po 0x88dafa0" wird nicht funktionieren, weil das Gedächtnis der bereits freigegeben wurde das Objekt.

Etwas mehr Googling führte mich zu this, wo der Autor beschreibt, wie frei/freigegebene Objekte zu finden. Wir müssen nur MallocStackLoggingNoCompact auf 1 in den Variablen setzen, die in der Umgebung zusammen mit NSZombieEnabled gesetzt werden sollen.

Der Ausgang i mit dem info malloc-history 0xf270740 Befehl bekam hatte eine Zeile:

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

Der Code auf dieser Linie ist:

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

Ich zog die [contactsViewController release]; Linie dealloc Methode anstelle unverzüglich nach [self.navigationController presentModalViewController:contactsViewController animated:YES]; und das Problem ist weg!

Verwandte Themen