5

Jestem zmagam się z tym przez 2 dni i wierzę, że jest to moment, w którym powinienem wezwać pomoc. Po krótkim wyszukiwaniu SOF żadna odpowiedź nie może rozwiązać mojego problemu. Oto mój wniosek ...Aplikacja próbowała przedstawić modalnie aktywny kontroler: UIImagePickerController

we wniosku,

  • urządzenie jest iPad, iOS 6
  • RootViewController jest NavigationController
  • TopViewController jest TabBarController
  • W tym TabBarController, przedstawiam popoverController z prawego przycisku paska nawigacyjnego
  • Prezentując popover, znajduje się przycisk umożliwiający użytkownikowi wybór obrazu z nowej lub wybranie z ting.
  • Aby wybrać nową, I presentViewontroler UIImagePickerController, aby umożliwić użytkownikowi zrobienie zdjęcia z kamerą typu divice. presentModalViewController: animowane: jeśli iOS < 6 i presentViewController: animowane: Zakończenie: dla iOS> 6
  • ja też ukryć Pasek stanu przed prezentacją
  • Aby wybrać istniejące zdjęcie, robię presentPopoverFromBarButtonItem: permitArrowDirections: animowany:
  • PopoverViewController także przedstawieniu przez TabBarController

Tutaj jest kwestia

  • Present UIImagePickerController zawsze zawiodły jeśli użytkownik spróbować wybrać nowy pierwszy z wyjątkiem „Aplikacja próbowała przedstawić modally aktywnym kontrolera < [nazwa widoku kontrolera, który starają się przedstawić]>”
  • BUT , jeśli użytkownik spróbuje wybrać obraz z rolki z kamery raz, a następnie spróbuje ponownie pobrać nowy, nie zawiedzie.

Oto, co starałem

  • prezent od RootViewController
  • obecny od TopViewController (TabBarController)
  • obecny od samego
  • prezent od karcie TabBarController
  • ukryj popoverViewController popoverViewController przed prezentacją
  • resignFirstResponder z textField w popoverViewController

Oto aktualny kod używam

// PopoverViewController, presented by a tab in TabBarController 
- (IBAction)takePhoto:(id)sender { 
    [self.delegate takePhotoWithDeviceCamera]; 
} 

// A Tab in TabBarController, delegate of popoverViewController 
- (void)takePhotoWithCamera { 
    [[UIApplication sharedApplication] setStatusBarHidden:YES]; 
    if ([UIDevice OSVersion] < 6.0) { 
     [self presentModalViewController:cameraPicker animated:YES]; 
    } else { 
     [self presentViewController:cameraPicker animated:YES completion:nil]; 
    } 
} 

jakiś pomysł co mogłoby spowodować ten błąd? Wszelkie sugestie są mile widziane. Dziękuję Ci.

+1

Zajrzyj tutaj [Kliknij] (http://stackoverflow.com/questions/7429014/application-tried- to-present-modally-an-active-controller). Może być pomocny. – junkor

+0

Pokaż nam, gdzie odrzuciłeś VC –

+0

Dzięki @junkor, ale już to przeczytałem. Chodzi o to, myślę, że przeczytałem wszystkie pytania związane z tym SOF przed opublikowaniem. Teraz postanowiłem oczyścić głowę i wrócić do tego później, przerobić cały proces i zobaczyć, co się stanie. –

Odpowiedz

2

Czy próbowałeś przedstawić go w ten sposób?

[self.view.window.rootViewController presentModalViewController:cameraPicker animated:YES]; 
+0

Tak, zrobiłem, o czym wspomniałem powyżej. Obecność z RootViewController, TopViewController, PopoverViewController i TabBarController są takie same. Doceń swoją sugestię. –

4

Przedstawić kontroler imagePicker w sterowniku popover (w przypadku iPada). To nie da ci tego błędu.

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { 
UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:picker]; 
[popover presentPopoverFromRect:self.selectedImageView.bounds inView:self.selectedImageView permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
self.popOver = popover; 
} 
else { 
[self presentModalViewController:picker animated:YES]; 
} 

Pozdrawiam.

+0

Wiem, że presentPopover znajduje się w Rolce z aparatu (bo tak robię), ale czy to też dobrze dla kamery urządzenia? –

+1

Witam, sprawdź dokumentację Apple, aby uzyskać więcej informacji. http://developer.apple.com/library/ios/#documentation/uikit/reference/UIImagePickerController_Class/UIImagePickerController/UIImagePickerController.html – Arun

0

Domyślam się, że instancja cameraPicker nie została poprawnie przydzielona/zwolniona. Spróbuj utworzyć cameraPicker wewnątrz metody - (void) takePhotoWithCamera zamiast polegać na wcześniej utworzonej instancji. Dostaniesz uchwyt do instancji próbnika w metodach oddzwaniania ...

0

Miałem ten sam problem - chciałem, aby użytkownicy robili zdjęcia przy użyciu widoku pełnoekranowego (tj. Dzwoń presentViewController i podaj instancję kontrolera UIImagePickerController) i wybierz istniejące zdjęcia z popover (skojarzyłem je z popover za pomocą initWithContentViewController). Wykorzystałem ponownie to samo wystąpienie UIImagePickerController zarówno dla kamery, jak i popover, i wyrzuciłem ten sam wyjątek, jeśli spróbowałem uruchomić kamerę przed otwarciem popover.

Okazało się, że spowodowałem problem, a moim rozwiązaniem było po prostu mieć dwa wystąpienia UIImagePickerController - jeden dla kamery (który przedstawiłem z widoku głównego) i kolejny dla popover. Działa do tej pory. :-)

Nie jestem pewien, czy jest on nadal aktualny dla oryginalnego plakatu, ale mam nadzieję, że pomoże on każdemu, kto napotka tę dyskusję.

4

Mam takie same kłopoty, jak ty, a na końcu otrzymałem rozwiązanie oparte na odpowiedzi @ CainaSouza. Pracowałem z Xamarin.iOS, więc odpowiem w C#, ale można to łatwo przetłumaczyć na Objective-C.

Używam tego samego kodu jako @CainaSouza zadzwonić kontroler:

UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController (customController, true, null); 

a następnie dodać następujący kod do mojego zwyczaju RootViewController:

public override void PresentViewController (UIViewController viewControllerToPresent, bool animated, Action completionHandler) 
{ 
    if (PresentedViewController != viewControllerToPresent) { 
     base.PresentViewController (viewControllerToPresent, animated, completionHandler); 
    } 
} 

Sztuką jest, aby sprawdzić, jeśli wcześniej nie prezentowałeś tego UIViewController.

Wiem, że to stare pytanie, ale mam nadzieję, że komuś pomoże. :)

Powiązane problemy