Ten błąd pojawia się tylko w iOS 7 i aplikacja uległa awarii. W iOS 6 nigdy nie pojawia się żaden błąd, tylko raz ostrzeżenie o pamięci przy otwieraniu aparatu.
Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or snapshot after screen updates.
Oto co robię.
imagePicker = [[UIImagePickerController alloc] init];
[imagePicker setDelegate:self];
[imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
[imagePicker setAllowsEditing:YES];
[self presentModalViewController:imagePicker animated:YES];
Próbowałem opóźnić presentModalViewController
, ale nadal otrzymuję tę samą wiadomość. Po kilku sekundach (7-10) aplikacja uległa awarii.
Ten błąd występuje tylko w iOS 7.
Czy ktoś ma wskazówkę?
Odpowiedzi:
Problem w iOS7 dotyczy przejść. Wygląda na to, że jeśli poprzednie przejście nie zostało zakończone i uruchomisz nowe, iOS7 psuje widoki, gdzie iOS6 wydaje się zarządzać nim poprawnie.
Powinieneś zainicjować kamerę w swoim
UIViewController
, dopiero po załadowaniu widoku i po upływie limitu czasu:a oto kod inicjalizacyjny
źródło
Ten błąd pojawił się również w przypadku przykładowego projektu kodu Apple PhotoPicker.
Używałem Xcode w wersji 5.0 i iOS 7.0.3 na iPhonie 4.
Kroki ku reprodukcji:
Pobierz przykładowy projekt Apple PhotoPicker ze strony https://developer.apple.com/library/ios/samplecode/PhotoPicker/Introduction/Intro.html
W APLViewController.m skomentuj wiersz 125
//imagePickerController.showsCameraControls = NO;
W APLViewController.m zakomentuj linie 130-133
//[[NSBundle mainBundle] loadNibNamed:@"OverlayView" owner:self options:nil];
// self.overlayView.frame = imagePickerController.cameraOverlayView.frame;
// imagePickerController.cameraOverlayView = self.overlayView;
// self.overlayView = nil;
Zbuduj i uruchom aplikację.
Po uruchomieniu obróć urządzenie do trybu poziomego.
Kliknij ikonę aparatu, aby otworzyć UIImagePickerController w trybie aparatu.
Wyświetl dane wyjściowe konsoli.
Wyjście konsoli
PhotoPicker [240: 60b] Wykonanie migawki widoku, który nie został wyrenderowany, powoduje powstanie pustej migawki. Upewnij się, że widok został wyrenderowany co najmniej raz przed utworzeniem migawki lub migawki po aktualizacji ekranu.
showsCameraControls
Problem występuje u mnie, gdy ma to wartość TAK (domyślnie).
Ustawienie tej opcji na NIE wyeliminowało komunikat.
Zgłoszenie błędu
Właśnie złożyłem raport o błędzie w Apple.
Wypróbowałem wiele sugestii zawartych w różnych postach, ale nie znalazłem satysfakcjonującego obejścia.
źródło
Pojawił się problem, gdy próbowałem pokazać widok z kamery wewnątrz popovera. Pod iOS6 to nie był problem, ale w iOS7 dostałem wiadomość
także.
Jednak po zmianie prezentacji widoku aparatu na pełny ekran, jak opisano w sekcji Robienie zdjęć i filmów, Biblioteka programistów iOS, wszystko znowu poszło dobrze i komunikat nigdy się więcej nie pojawił. Musiałem jednak upewnić się, że w zależności od tego, w jakim trybie jest aplikacja (tj. Prezentując widok z kamery lub rolkę ze zdjęciami), musiałem albo odrzucać popover, albo kontroler widoku przy każdym
- (void) imagePickerControllerDidCancel: (UIImagePickerController *) picker
wywołaniu metody .źródło
stworzyć nieruchomość
Następnie
To powinno rozwiązać problem
źródło
Użyłem tego kodu, aby obejść problem:
źródło
Mam ten sam problem i znalazłem rozwiązanie. Myślę, że to błąd związany z orientacją Twojej aplikacji. Moja aplikacja używa tylko trybu poziomego, ale UIImagePickerController używa trybu pionowego. Dodaję blok try-catch do main.m i otrzymuję prawdziwy wyjątek:
Jak rozwiązać ten problem:
1) Ponownie sprawdź orientację urządzenia w pliku Target-> General lub .plist: Obsługiwane orientacje interfejsu: Pozioma lewa, Pozioma prawa.
2) Dodaj w AppDelegate.m:
Po tym kroku UIImagePickerController działa poprawnie, ale moje kontrolery widoku można obrócić do trybu portretowego. Aby rozwiązać ten problem:
3) Utwórz kategorię dla UINavigationController, (supportedInterfaceOrientations przeniesione z UIViewController do UINavigationController w iOS6):
To rozwiązanie działa poprawnie na iOS 6.0, 6.1, 7.0. Mam nadzieję że to pomoże.
źródło
Ten błąd pojawia się podczas tworzenia aplikacji za pomocą zestawu iOS SDK 6.1, docelowego wdrożenia systemu iOS 6.1 i uruchamiania aplikacji na telefonie iPhone z systemem iOS 7. Aplikacja nie ulega awarii, ale
UIViewController shouldAutorotate
metoda implementacji pomaga mi usunąć komunikat o błędzie.źródło
Miałem ten sam problem, gdy próbowałem zmodyfikować aplikację demonstracyjną dostarczaną z Avirary SDK , w aplikacji demonstracyjnej można edytować tylko zdjęcie wybrane z rolki aparatu. Aby spróbować edytować zdjęcie przez przechwytywanie z aparatu, najpierw dodałem następujący kod w pliku UIViewcontroller.m:
Po uruchomieniu aplikacji pojawił się błąd:
Aby rozwiązać ten błąd, zmodyfikuj delegata UIImagePicker w pliku UIViewContooler.m, jak pokazano poniżej:
Wtedy błąd zniknął i aplikacja działa!
źródło
Spróbuj tego, użyj
i funkcji
zamienić.
[self presentModalViewController:imagePicker animated:YES];
i przyczynyimagePicker
jako zmienna globalna.źródło
To właśnie rozwiązało problem w mojej aplikacji ymmv
po pierwsze jest to aplikacja na iPhone'a - iPada
w appname-Info.plist. w Obsługiwanych orientacjach interfejsu (iPad) pokazał 4 orientacje.
w Obsługiwanych orientacjach interfejsu pokazał 3 orientacje. Dodałem czwartą i uruchomiłem aplikację, bez wyjścia debugowania.
Mam nadzieję że to pomoże.
źródło
Właśnie napotkałem ten sam problem. W moim przypadku problem polegał na tym, że miałem kod spoza ARC i przeniosłem go do ARC. Kiedy przeprowadzałem migrację, nie miałem silnego odniesienia do programu
UIImagePickerController
i to było przyczyną awarii.Mam nadzieję, że to pomoże :)
źródło
Miałem ten sam problem w iOS 8, ale dostęp do aparatu był wyłączony w Ustawieniach -> Prywatność dla mojej aplikacji. Po prostu włączyłem to i działało.
źródło
Spędziłem dużo czasu próbując znaleźć rozwiązanie i, co zaskakujące, znalazłem je na końcu i było to bardzo zabawne, gdy je odkryłem.
Oto, co zrobisz, aby odzyskać wybrany obraz i wznowić pracę :)
Tak, aby rozwiązać ten problem, wystarczy normalnie odrzucić selektor, tak jak wygląda ten komunikat: „Tworzenie migawki widoku, który nie został wyrenderowany, powoduje powstanie pustej migawki. Upewnij się, że widok został wyrenderowany przynajmniej raz przed wykonaniem zrzutu lub migawki po aktualizacje ekranu ”. powstrzymuje selektor przed odpowiadaniem, ale możesz go odrzucić i normalnie odzyskać obraz.
źródło
W moim przypadku było to związane ze zmianą layoutu: VC prezentujący
UIImagePickerViewController
ma ukryty pasek stanu, aleUIImagePickerViewController
nie.Więc rozwiązałem to, ukrywając pasek stanu w
UIImagePickerViewController
tak, jak pokazano w tej odpowiedzi .źródło
Nie odpowiadając bezpośrednio na twoje pytanie, ale wspomniałeś, że masz ostrzeżenie dotyczące pamięci, być może przechowujesz nieprzetworzony obraz we właściwości, która może prowadzić do ostrzeżenia dotyczącego pamięci. Dzieje się tak, ponieważ nieprzetworzony obraz zajmuje około 30 MB pamięci. Zauważyłem podobne ostrzeżenie dotyczące pamięci podczas testowania aplikacji na iOS6, które były na serii iPhone 4. Nadal otrzymuję to ostrzeżenie, gdy urządzenia zostały zaktualizowane do iOS7. Nie ma ostrzeżenia dotyczącego pamięci podczas testowania na telefonie iPhone 5 z systemem iOS7.
źródło
Wymiana pieniędzy
do
naprawił problem dla mnie.
źródło