2014-02-05 4 views
4

Я пытаюсь использовать UIImagePickerController, чтобы позволить моим пользователям выбирать фотографии или делать фотографии, которые будут использоваться в моем приложении. Но приложение, похоже, чаще всего разбивается, когда изображение выбирается из их фотографий или когда они предпочитают использовать фотографию. Я использовал объекты NSZombie и я получаю сообщение:iOS 7 сбой BAD_ACCESS при использовании UIImagePickerController

[NSISRestrictedToNonNegativeVariable сохранить]: сообщение, отправленное высвобождены например 0x168c3530

Я не знаю, что здесь происходит. Эта же проблема возникла, когда я периодически представлял модальный вид.

Вот мой код для представления UIImagePickerController и обработки ответа:

- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex 
    { 
     if ([[actionSheet buttonTitleAtIndex:buttonIndex] isEqualToString:CANCEL_TITLE]) { 
      return; 
     } 
     UIImagePickerControllerSourceType sourceType = buttonIndex == 0 ? UIImagePickerControllerSourceTypePhotoLibrary : UIImagePickerControllerSourceTypeCamera; 
     UIImagePickerController* controller = [[UIImagePickerController alloc] init]; 
     controller.sourceType = sourceType; 
     [controller setDelegate:self]; 
     if (buttonIndex == 1) { 
      //PNCoverOverlayView* overlayView = [PNCoverOverlayView viewWithNibNamed:nil]; 
      //[controller setCameraOverlayView:overlayView]; 
      [controller setShowsCameraControls:YES]; 
     } 
     [self presentViewController:controller animated:YES completion:nil]; 
    } 

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
    { 
     [picker dismissViewControllerAnimated:YES completion:^{ 
      UIImage* originalImage = info[UIImagePickerControllerOriginalImage]; 
      _imageToUpload = originalImage; 
      CGFloat scaleAdjust = ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2) ? 0.5 : 1; 
      CGFloat length = LENGTH * scaleAdjust; 
      if ([picker sourceType] == UIImagePickerControllerSourceTypeCamera) { 
       PNCoverOverlayView* overlay = (PNCoverOverlayView*)[picker cameraOverlayView]; 
       CGSize overlaySize = [overlay frame].size; 
       UIImage* cropped = [UIImage imageCroppedToSize:overlaySize fromImage:originalImage]; 
       _imageToUpload =[UIImage imageResizedToSize:CGSizeMake(length, length) fromImage:cropped]; 
      } else { 
       _imageToUpload = [UIImage imageScaledToMaximumLength:length fromImage:originalImage]; 
      } 
      [self performSegueWithIdentifier:@"reviewPhotoUpload" sender:self]; 
     }]; 
    } 

Я закомментирована добавление пользовательского наложения на UIImagePickerController, потому что исправили приложение сбой при представлении UIImagePickerController

+1

Решена ли ваша проблема? – NeverHopeless

+0

Нет. Моя проблема не разрешена. – user3072533

+0

Испытывая ту же проблему, по-прежнему не найдено способов решить эту проблему. –

ответ

0

вас следует проверить следующие вещи:

  1. Вы тестируете его на устройстве?

  2. Следуйте инструкциям, указанным в разделе Overview, в руководстве по установке яблока и позаботьтесь о том, на каком устройстве вы работаете. например, iPhone или iPad.

  3. Проверьте также isSourceTypeAvailable.

  4. Кроме того, проверьте наличие isCameraDeviceAvailable.

  5. При попытке получить cameraOverlayView, вы должны проверить, не является ли его nil. См. Документацию этого свойства для получения дополнительной информации .

Надеется, что это помогает!

0

Вы инстанцирование контроллера в вашей функции:

UIImagePickerController* controller = [[UIImagePickerController alloc] init];

Вы должны держать сильную ссылку на контроллер в своем классе, Ивар был бы хорошим выбором для этого.

+0

Вам действительно не нужно сохранять сильную ссылку, поскольку вы сразу представляете контроллер и получаете его 'presentingController', если он не уволен. Все ответные вызовы сборщика выполняются до того, как они будут уволены. – Rivera

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