2017-01-19 1 views
0

С iOS 10+ необходимо добавить NSCameraUsageDescription Разрешить использование фотографий для использования в режиме секретности. Это приводит к всплывало появляться, когда я запускаю следующий код в первый раз:Неуравновешенные вызовы для перехода на начало/конец с использованием UIImagePickerController

Всплывающий вызывают следующую ошибку: она кажется

несбалансированных вызовы для начала/конца внешнего вида переходов для.

Это код, который я пытаюсь выполнить:

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex (NSInteger)buttonIndex{ 
    if (buttonIndex < 2) { 

     UIImagePickerController *imagePickerController[[UIImagePickerController alloc] init]; 

     imagePickerController.mediaTypes = @[(__bridge NSString *)kUTTypeImage]; 

     imagePickerController.allowsEditing = YES; 

     imagePickerController.delegate = self; 

     if (buttonIndex == 0) {   
      imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera; 

     } else if (buttonIndex == 1) { 
      imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 

     } 

     [self presentViewController:imagePickerController animated:NO completion:nil]; 

    } 
} 

Как только я выбираю КИ на Попе, чтобы позволить приложению использовать камеру он выходит из строя.

Если я вернусь в приложение и повторю попытку, потому что Pop Up не появляется, мой код будет выполнен, и я могу получить изображение соответственно.

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ 


    NSString *tmpFilePath = @""; 
    tmpFilePath = [_myHelper retrieveAppDirectory:self.username]; 


    UIImage *image = [info objectForKey: UIImagePickerControllerEditedImage]; 


    if (!image) { 

     [info objectForKey: UIImagePickerControllerOriginalImage]; 
    } 


    NSString *imageName = [NSString stringWithFormat:@"image-%d.securedData", self.photos.count + 1]; 


    [_myHelper performEncryptionForSecuredData:image filePath:tmpFilePath fileName:imageName]; 


    [self.photos addObject:image]; 

    [self.collectionView reloadData]; 

    [picker dismissViewControllerAnimated:YES completion:nil]; 
} 

Я знаю, что это было задано так много раз, прежде чем. Любая идея Что я, возможно, делаю неправильно? Заранее спасибо .......

+0

Извините за такой длинный вопрос. Я попытался следующие, но никто не похоже на работу: [self.view.window.rootViewController presentViewController: imagePickerController анимированный: НЕТ завершение: ноль] Я также попытался настройке [[NSOperationQueue mainQueue] addOperationWithBlock:^{ } Но всегда кажется, что всплывающее окно с чернилами появляется в первый раз. После того, как вы скажете iOS, он может использовать камеру, ошибка больше не появится ..... –

+0

Очевидным способом избежать этой проблемы является получение вашего приложения через всю галерею разрешения камеры/фотобанка _before_, отображающего контроллер выбора изображения , – matt

+0

Мэтт Я не уверен на ваших комментариях на 100%. Всплывающее окно, в котором предлагается разрешить доступ приложения к камере, возникает при первом использовании камеры, не так ли? Есть ли другой способ, которым я могу позволить использовать камеру без диалога? –

ответ

0

Как UIActionSheet осуждается с прошивкой 8.3 вы должны использовать UIAlertController для всех оповещения/ActionSheet.

Пожалуйста, используйте ниже код для ActionSheet:

UIAlertController* alert = [UIAlertController 
           alertControllerWithTitle:nil  // Must be "nil", otherwise a blank title area will appear above our two buttons 
           message:nil 
           preferredStyle:UIAlertControllerStyleActionSheet]; 

UIAlertAction* button0 = [UIAlertAction 
           actionWithTitle:@"Cancel" 
           style:UIAlertActionStyleCancel 
           handler:^(UIAlertAction * action) 
           { 
            // UIAlertController will automatically dismiss the view 
           }]; 

UIAlertAction* button1 = [UIAlertAction 
           actionWithTitle:@"Camera" 
           style:UIAlertActionStyleDestructive 
           handler:^(UIAlertAction * action) 
           { 
            // The user tapped on "Camera" 
            UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init]; 

            imagePickerController.allowsEditing = YES; 
            imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera; 
            imagePickerController.delegate = self; 
            [self presentViewController:imagePickerController animated:NO completion:nil]; 
           }]; 

UIAlertAction* button2 = [UIAlertAction 
           actionWithTitle:@"Photo Library" 
           style:UIAlertActionStyleDestructive 
           handler:^(UIAlertAction * action) 
           { 
            // The user tapped on "Camera" 
            UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init]; 

            imagePickerController.allowsEditing = YES; 
            imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
            imagePickerController.delegate = self; 
            [self presentViewController:imagePickerController animated:NO completion:nil]; 
           }]; 
    [alert addAction:button0]; 
    [alert addAction:button1]; 
    [alert addAction:button2]; 
    [self presentViewController:alert animated:YES completion:nil]; 

Используйте тот же Imagepicker делегат.

Надеюсь, это поможет.

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