2013-04-29 2 views
0

У меня были некоторые отчеты о сбоях от bugsense для моего приложения iOS. Я не могу воспроизвести и не отлаживать. Это происходит более 200 раз в день, поэтому я думаю, что это довольно серьезно.Отладка objc_msgSend crash Я не могу воспроизвести

Я кое-что прочитал о NSZombie, но я не могу воспроизвести крах, поэтому, я думаю, это бесполезно. Вот отчет о сбое:

SIGSEGV 
0 libobjc.A.dylib 0x3aa515b0 objc_msgSend + 15 
1 UIKit 0x34d493df + 294 
2 UIKit 0x34cae469 + 52 
3 QuartzCore 0x34926099 + 160 
4 QuartzCore 0x34925ff1 + 64 
5 IOMobileFramebuffer 0x36ba1fd7 + 154 
6 IOKit 0x33920449 IODispatchCalloutFromCFMessage + 192 
7 CoreFoundation 0x32d035db + 118 
8 CoreFoundation 0x32d0e173 + 34 
9 CoreFoundation 0x32d0e117 + 138 
10 CoreFoundation 0x32d0cf99 + 1384 
11 CoreFoundation 0x32c7febd CFRunLoopRunSpecific + 356 
12 CoreFoundation 0x32c7fd49 CFRunLoopRunInMode + 104 
13 GraphicsServices 0x368562eb GSEventRunModal + 74 
14 UIKit 0x34b95301 UIApplicationMain + 1120 
15 My Bet main (main.m:16) Live 0x000705e7 0x6d000 + 13799 

На некоторых аналогичных нитей они считают, что проблема может быть в UIAlertView, так вот пример того, как я использую их: в file.h

UIAlertView *alertView; 

in file.m

-(void)wait{ 
UIActivityIndicatorView * activityView = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 
activityView.frame = CGRectMake(121.0f, 50.0f, 37.0f, 37.0f); 
[activityView startAnimating]; 
alertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Searching...", @"") message:nil delegate:nil cancelButtonTitle:nil otherButtonTitles:nil]; 
[alertView addSubview:activityView]; 
[alertView show]; 
[NSThread detachNewThreadSelector:@selector(function) toTarget:self withObject:nil]; 
} 
-(void)function{ 
// Do some web request 
[alertView dismissWithClickedButtonIndex:0 animated:NO]; 
if(response == nil){ 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Timeout", @"") message:NSLocalizedString(@"Connection timeout", @"") delegate:nil cancelButtonTitle:NSLocalizedString(@"Close", @"") otherButtonTitles:nil ]; 
    [alert show]; 
} 
} 

Любой намек на то, как я могу принять решение об этом? Thanks

ответ

2

Возможно, авария произошла из-за увольнения и отображения UIAlertView из другой темы.

Никогда не делайте UI задач в других тонах. UI Задачи должны выполняться в главной теме. не

Изменение function как:

-(void)function 
{ 
// Do some web request 

dispatch_async(dispatch_get_main_queue(), ^{ 
    [alertView dismissWithClickedButtonIndex:0 animated:NO]; 
    if(response == nil) 
    { 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Timeout", @"") message:NSLocalizedString(@"Connection timeout", @"") delegate:nil cancelButtonTitle:NSLocalizedString(@"Close", @"") otherButtonTitles:nil ]; 
    [alert show]; 
    } 
    }); 
} 
+0

это то же самое, чтобы сделать dispatch_async (dispatch_get_main_queue(),^{[alertView dismissWithClickedButtonIndex: 0 анимированные: NO];}); а затем использовать другой dispatch_async, чтобы показать второе предупреждение? – lorenzop

+0

@ user1187692: P нет необходимости делать это :) У вас уже есть основной поток с помощью 'dispatch_get_main_queue', тогда нет необходимости снова использовать GCD и' dispatch_get_main_queue'. Вы можете написать эти строки в одном дескрипторе 'dispatch_get_main_queue' GCD. –

Смежные вопросы