2015-10-27 3 views
1

Вот часть моего кода:Как я могу поймать это исключение в iOS?

self.rearPicker = [[UIImagePickerController alloc] init]; 
self.rearPicker.delegate = self; 
self.rearPicker.sourceType = UIImagePickerControllerSourceTypeCamera; 
self.rearPicker.cameraDevice = UIImagePickerControllerCameraDeviceRear; 
self.rearPicker.showsCameraControls = NO; 
dispatch_async(dispatch_get_main_queue(), ^{ 
[self presentViewController:self.rearPicker animated:YES completion:^{ 
    // send log to my server.And log's success in sending shows that everything goes pretty well until this line. 
    @try { 
    // I think it's this line of code that causes crash on some device. What else can I do to avoid crashes besides @[email protected] 
    [self.rearPicker performSelector:@selector(takePicture) withObject:nil afterDelay:3.f]; 
    } 
    @catch (NSException *exception) { 
     [self dismissViewControllerAnimated:YES completion:nil]; 
    } 
    @finally { 
     // do nothing for now 
    } 

    }]; 
}); 

// Согласно моему журналу в сервере и аварии журнале, на каком-то устройстве моего приложение может нормально выполнять

[self.rearPicker performSelector:@selector(takePicture) withObject:nil afterDelay:3.f]; 

// Но разбился где-то после этого , Есть два вида журнала аварии как ниже:

  1. *** setObjectForKey: объект не может быть нулевым (ключ: UIImagePickerControllerOriginalImage)

  2. *** Камера обнаружения ошибок Формат устройства захвата для магната

// Я действительно смущен. Как я могу поймать эти два исключения? Спасибо вам за терпение и доброту!

+0

добавьте метод takePicture –

+0

метод takePicture это метод SDK iOS "- [UIImagePickerController takePicture]". Спасибо! – 0xa6a

ответ

0

Внутри @try все, что вы делаете, отправляет что-то, что произойдет позже. @try не содержит того, что происходит позже, только запрос на это.

Вместо этого вы должны отправить свой метод, а затем внутри этого метода вы добавите обработку исключений непосредственно вокруг вызова проблемы (takePicture). Обратите внимание: если этот вызов делает что-то асинхронное, то у вас будет аналогичная проблема.

В общем, лучше всего добавить контрольные точки и решить, почему у вас есть проблема, поэтому вы можете добавлять проверки, чтобы избежать этой ситуации, а не пытаться справиться с ней после ее возникновения.

+0

, а как насчет этого: @try {sleep (3); [self.rearPicker takePicture]; } Благодаря. – 0xa6a

+0

Вы могли бы, но, конечно, не рекомендуется спать основную нить ... – Wain

+0

Спасибо за ваш ответ. – 0xa6a

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