2012-11-28 2 views
8

Ich versuche, einen Absturz durch eine private Methode in UIAlertView zu finden. Etwa die Hälfte meiner App-Abstürze beinhalten dies.Strange UIAlertView private Methode Absturz _performPopup

-[UIAlertView(Private) _performPopup:animationType:revealedBySpringBoardAlert:] 

Hier ist der Abschnitt von meinem Absturzbericht. Was mich stört ist, dass die meisten meiner Alarmansichten von Singleton-Objekten aufgerufen werden, die während des gesamten Lebenszyklus der App existieren sollen. Ich bin mir also nicht sicher, ob dies dadurch verursacht wird, dass der UIAlertView-Delegat freigegeben wird, bevor er von ihm aufgerufen wird. Hat das jemand schon mal gesehen? Könnten Sie mir bitte einen Ratschlag geben? Vielen Dank.

Hardware Model:  iPhone4,1 
Version:   ??? (???) 
Code Type:  ARM (Native) 
Parent Process: launchd [1] 

Date/Time:  2012-11-15 11:31:57.452 -0800 
OS Version:  iOS 6.0.1 (10A523) 
Report Version: 104 

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

Thread 0 name: Dispatch queue: com.apple.main-thread 
Thread 0 Crashed: 
0 libobjc.A.dylib     0x33ab95b6 objc_msgSend + 22 
1 UIKit       0x32e52fa0 -[UIAlertView(Private) _performPopup:animationType:revealedBySpringBoardAlert:] 
2 UIKit       0x330621c4 -[UIAlertView(Private) _repopupNoAnimation] 
3 UIKit       0x33065b38 __36-[_UIAlertStackWatcher _appResumed:]_block_invoke_0 
4 libdispatch.dylib    0x37ec211c _dispatch_call_block_and_release 
5 libdispatch.dylib    0x37ec14b4 _dispatch_client_callout 
6 libdispatch.dylib    0x37ec61b8 _dispatch_main_queue_callback_4CF$VARIANT$mp 
7 CoreFoundation     0x39ba2f36 __CFRunLoopRun 
8 CoreFoundation     0x39b15eb8 CFRunLoopRunSpecific 
9 CoreFoundation     0x39b15d44 CFRunLoopRunInMode 
10 GraphicsServices    0x37ee32e6 GSEventRunModal 
11 UIKit       0x32d552f4 UIApplicationMain 
12 MYAPP       0x0000334a main + 70 
13 MYAPP       0x000032fc start + 36 
+0

Can u für die Erstellung von Alertview teilt Code –

+1

Siehe Beitrag:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleApplicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil]; 

Die Implementierung von handleApplicationDidEnterBackground dann sollte wie folgt aussehen: http: // stackoverflow.com/questions/2581081/uialertview-crashing-on-undocumented-method – petert

Antwort

3

Es klingt wie der Delegat verursacht hier das Problem. Für einfache UIAlertViews, die können Sie die Delegierten auf Null nur nicht festlegen müssen die Benutzereingabe verfolgen, wie zum Beispiel:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"My Alert" message: @"My Message" delegate: nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
[alert show]; 

Wenn Sie die Delegatmethoden tun müssen, so stellen Sie sicher, dass Sie die UIAlertView Delegierter nil, wenn verlieren den Blick:

alert.delegate = nil; 

Entweder in dealloc oder möglicherweise viewWillDisappear: je nachdem, wie Ihr Code ist eingerichtet!

0

Es ist auch eine gute Idee, die Alarmansicht zu verwerfen, wenn die App in den Hintergrund geht.

Fügen Sie folgende zu der viewDidLoad Methode:

- (void)handleApplicationDidEnterBackground:(NSNotification *)n 
{ 
    if (self.alertView) 
    { 
     self.alertView.delegate = nil; 
     [self.alertView dismissWithClickedButtonIndex:[self.alertView cancelButtonIndex] animated:NO]; 
     self.alertView = nil; 
    } 
}