2013-10-14 3 views
1

Этот код работал под iOS6.2; установленный iOS7 и теперь сбой:Камера, работающая на iOS7, не открывается, а затем падает (EXC_BAD_ACCESS)

- (IBAction)bOpenCamera:(UIButton *)sender { 

if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]) { 

     customerCameraFlag = YES; // indicator so text fields are not cleared 

     UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; 
     imagePicker.delegate = (id)self; 
     imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; 
     imagePicker.mediaTypes = [NSArray arrayWithObjects: (NSString *) kUTTypeImage, nil]; 
     imagePicker.allowsEditing = NO; 
     [self presentViewController:imagePicker animated:YES completion:nil]; 
     newMedia = YES; 
} 

} 

Я использую тот же код в двух отдельных классах; ни одна работа. Камера никогда не открывается, просто сбой при завершении последней строки (newMedia = YES). Я просмотрел все записи в SO и Google и не нашел ничего похожего на этот сбой. Он, видимо, работал на iOS 6, но теперь я не могу его протестировать, потому что я перешел на iOS7.

Любые идеи о том, как исправить это?

+0

Это немного несвязанный, но какой тип 'customerCameraFlag'? Если это 'BOOL', значение должно быть' YES', а не 'TRUE'. – danielbeard

+0

Попробуйте включить контрольную точку исключения и добавьте точный текст исключения, который заносится в ваш вопрос. – danielbeard

+0

@ danielbeard: попытался включить контрольные точки исключения, но ничего в коде выше не вызывает исключение. Все стандартные методы делегатов никогда не выполняются, поэтому я предполагаю, что это вызывает его. Точный текст исключения - EXC_BAD_ACCESS. – SpokaneDude

ответ

0

* EXC_BAD_ACCESS не является исключенным броском; это тяжелый крах. Спокан-чувак должен размещать трассировку фактической аварии. *


при выполнении того же приложения на IPad под iOS7, вне отладчика работает отлично!

Держу пари, что он не работает нормально. Кажется, что он работает, но что-то все еще происходит не так, возможно, искажая данные пользователя. Я бы понял, какой приоритет.

Опубликовать сведения об аварии.


OK - авария здесь:

Thread 0 Crashed: 
0 libsystem_kernel.dylib   0x3b39c350 __pthread_kill + 8 
1 libsystem_c.dylib    0x3b31311e pthread_kill + 54 
2 libsystem_c.dylib    0x3b34f96e abort + 90 
3 REDACTED.APP     0x0006aa72 0x19000 + 334450 
4 Foundation      0x338a438c -[NSObject(NSThreadPerformAdditions) performSelector:onThread:withObject:waitUntilDone:modes:] + 164 
5 Foundation      0x338a4088 -[NSObject(NSThreadPerformAdditions) performSelectorOnMainThread:withObject:waitUntilDone:] + 132 
  • То, что основной поток диспетчерская себе является довольно странным, и свидетельствует о шатком, в лучшем случае, параллелизм реализации.

Но подождите! Аварии на самом деле дальше тему 0:

11 libsystem_c.dylib    0x3b34f96e abort + 90 
12 libsystem_c.dylib    0x3b3304cc __assert_rtn + 176 
13 REDACTED.APP      0x0001c3f2 0x19000 + 13298 
14 UIKit       0x34e4bd18 -[UIView(CALayerDelegate) drawLayer:inContext:] + 360 
15 QuartzCore      0x34bfabe0 -[CALayer drawInContext:] + 108 

Что бы ни было в кадре 13 - некоторый слой делегат пытается сделать - это утверждать() Ing.

Учитывая, что это неудачное утверждение в методе рисования, это должно значительно сузить предмет.

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