Je reçois cette erreur uniquement dans iOS 7 et l'application s'est plantée. Dans iOS 6, je n'obtiens jamais d'erreur, juste une fois d'avertissement de mémoire lors de l'ouverture de la caméra.
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.
Voici ce que je fais.
imagePicker = [[UIImagePickerController alloc] init];
[imagePicker setDelegate:self];
[imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
[imagePicker setAllowsEditing:YES];
[self presentModalViewController:imagePicker animated:YES];
J'ai essayé de retarder le presentModalViewController
, mais je reçois toujours le même message. Après quelques secondes (7-10), l'application s'est plantée.
Cette erreur n'est présente que dans iOS 7.
Quelqu'un a-t-il la moindre idée?
Réponses:
Le problème dans iOS7 est lié aux transitions. Il semble que si une transition précédente ne s'est pas terminée et que vous en lancez une nouvelle, iOS7 gâche les vues, où iOS6 semble la gérer correctement.
Vous devez initialiser votre caméra dans votre
UIViewController
, uniquement après le chargement de la vue et avec un délai d'expiration:et voici le code d'initialisation
la source
Cette erreur s'est également manifestée pour moi avec le projet de code d'exemple PhotoPicker d'Apple.
J'utilisais Xcode Version 5.0 et iOS 7.0.3 sur un iPhone 4.
Étapes à suivre pour reproduire:
Téléchargez l'exemple de projet PhotoPicker d'Apple à l' adresse https://developer.apple.com/library/ios/samplecode/PhotoPicker/Introduction/Intro.html
Dans APLViewController.m commentez la ligne 125
//imagePickerController.showsCameraControls = NO;
Dans APLViewController.m commentez les lignes 130-133
//[[NSBundle mainBundle] loadNibNamed:@"OverlayView" owner:self options:nil];
// self.overlayView.frame = imagePickerController.cameraOverlayView.frame;
// imagePickerController.cameraOverlayView = self.overlayView;
// self.overlayView = nil;
Créez et lancez l'application.
Une fois lancé, faites pivoter l'appareil en mode Paysage.
Cliquez sur l'icône Appareil photo pour ouvrir UIImagePickerController en mode Appareil photo.
Affichez la sortie de la console.
Sortie de la console
PhotoPicker [240: 60b] Instantané d'une vue qui n'a pas été rendue entraîne un instantané vide. Assurez-vous que votre vue a été rendue au moins une fois avant la capture ou la capture après les mises à jour de l'écran.
showsCameraControls, propriété
Le problème se produit pour moi lorsque cela a une valeur de OUI (la valeur par défaut).
Le réglage sur NON a éliminé le message.
Rapport d'erreur
Je viens de déposer un rapport de bogue avec Apple.
J'ai essayé de nombreuses suggestions qui ont été faites dans différents articles, mais je n'ai pas trouvé de solution de contournement satisfaisante.
la source
J'ai eu le problème lorsque j'ai essayé de présenter la vue de la caméra à l'intérieur d'un popover. Sous iOS6, ce n'était pas un problème mais dans iOS7 j'ai reçu le message
ainsi que.
Cependant, après avoir changé la présentation de la vue de la caméra en plein écran, comme décrit dans Prendre des photos et des films, iOS Developer Library, tout s'est bien passé et le message n'est plus jamais réapparu. Cependant, je devais m'assurer que, selon le mode dans lequel se trouve l'application (c'est-à-dire, présenter la vue de la caméra ou la pellicule photo), je devais soit rejeter le popover soit le contrôleur de vue chaque fois que la méthode
- (void) imagePickerControllerDidCancel: (UIImagePickerController *) picker
était appelée.la source
créer une propriété
ensuite
Cela devrait résoudre le problème
la source
J'ai utilisé ce code pour contourner le problème:
la source
J'ai le même problème et j'ai trouvé une solution. Je pense que cette erreur est liée à l'orientation de votre application. Mon application utilise uniquement le mode paysage, mais UIImagePickerController utilise le mode portrait. J'ajoute un bloc try-catch à main.m et j'obtiens une vraie exception:
Comment résoudre ce problème:
1) Vérifiez à nouveau l'orientation de l'appareil dans le fichier Cible-> Général ou .plist: Orientations d'interface prises en charge: Paysage à gauche, Paysage à droite.
2) Ajouter dans AppDelegate.m:
Après cette étape, UIImagePickerController fonctionne correctement, mais mes viewcontrollers peuvent être tournés en mode portrait. Donc, pour résoudre ceci:
3) Créez une catégorie pour UINavigationController, (supportedInterfaceOrientations déplacé de UIViewController vers UINavigationController dans iOS6):
Cette solution fonctionne correctement sur iOS 6.0, 6.1, 7.0. J'espère que cela t'aides.
la source
J'obtiens cette erreur lors de la création d'une application avec le SDK iOS 6.1, la cible de déploiement iOS 6.1 et l'exécution de l'application sur un iPhone alimenté par iOS 7. L'application ne plante pas, mais la
UIViewController shouldAutorotate
méthode de mise en œuvre m'aide à supprimer le message d'erreur.la source
J'ai eu le même problème lorsque j'essayais de modifier l'application de démonstration fournie avec le SDK Avirary , dans l'application de démonstration, elle ne peut modifier que la photo sélectionnée dans la pellicule. Pour essayer de modifier la photo en capturant à partir de la caméra, j'ai d'abord ajouté le code suivant dans le fichier UIViewcontroller.m:
Ensuite, lorsque j'exécute l'application, l'erreur s'est produite:
Pour résoudre l'erreur, modifiez le délégué UIImagePicker dans votre fichier UIViewContooler.m comme indiqué ci-dessous:
Ensuite, l'erreur a disparu et l'application fonctionne!
la source
Essayez ceci, utilisez
et fonction
remplacer.
[self presentModalViewController:imagePicker animated:YES];
et de cause makeimagePicker
comme variable globale.la source
C'est ce qui a résolu le problème pour moi sur mon application, ymmv
tout d'abord, c'est une application iPhone - iPad
dans appname-Info.plist. dans les orientations d'interface prises en charge (iPad) a montré 4 orientations.
dans les orientations d'interface prises en charge ont montré 3 orientations. J'ai ajouté le quatrième et j'ai exécuté l'application, pas de sortie de débogage.
J'espère que cela t'aides.
la source
Je viens de rencontrer le même problème. Dans mon cas, le problème était que j'avais du code non-ARC et que je l'ai migré vers ARC. Lorsque j'ai effectué la migration, je n'avais pas de référence forte à la
UIImagePickerController
et c'était la raison du crash.J'espère que ça aide :)
la source
J'ai eu le même problème dans iOS 8, mais l'accès à la caméra était désactivé dans Paramètres -> Confidentialité pour mon application. Je l'ai juste activé, et cela fonctionnait.
la source
J'ai passé beaucoup de temps à essayer de trouver la solution, et étonnamment je l'ai trouvée à la fin et c'était juste très drôle une fois que je l'ai découverte.
Voici ce que vous allez faire pour récupérer l'image que vous avez choisie et reprendre le travail :)
Oui, pour résoudre le problème, il vous suffit de fermer le sélecteur normalement car il semble que ce message: "Prendre un instantané d'une vue qui n'a pas été rendue entraîne un instantané vide. Assurez-vous que votre vue a été rendue au moins une fois avant la capture ou la capture après mises à jour d'écran. " empêche le sélecteur d'être réactif, mais vous pouvez le rejeter et récupérer l'image normalement.
la source
Dans mon cas, c'était lié à un changement de mise en page: le VC présentant le
UIImagePickerViewController
a la barre d'état cachée, maisUIImagePickerViewController
pas.Donc, je l'ai résolu en cachant la barre d'état dans le
UIImagePickerViewController
comme indiqué dans cette réponse .la source
Vous ne répondez pas directement à votre question, mais vous avez mentionné que vous aviez un avertissement de mémoire, vous stockez peut-être l'image brute dans une propriété, ce qui peut entraîner un avertissement de mémoire. Cela est dû au fait que l'image brute occupe environ 30 Mo de mémoire. J'ai remarqué un avertissement de mémoire similaire lors du test d'applications sur iOS6 qui étaient sur la série iPhone 4. J'ai toujours reçu cet avertissement lorsque les appareils ont été mis à niveau vers iOS7. Il n'y a pas d'avertissement de mémoire lors des tests sur la série iPhone 5 sur iOS7.
la source
En changeant
à
a corrigé le problème pour moi.
la source