Crash sur la présentation de UIImagePickerController sous iOS 6.0
Mon application ne supporte paysage via le supportedInterfaceOrientation
propriétés.
À l'aide d'un iOS antérieures à iOS 6, mon application peut charger avec succès une instance de UIImagePickerController
via presentViewController:animated:completion:
même si le UIImagePickerController
lui-même prend uniquement en charge le mode portrait.
Le sélecteur d'images simplement en se présentait, à côté de l'utilisateur. L'utilisateur fait pivoter le téléphone, cueillis à leur image, et alors a tourné le dos au paysage.
Sous iOS 6.0, appelant presentViewController:animated:completion:
avec le UIImagePickerController
exemple bloque l'application. Je ne peux empêcher la collision par l'ajout de portrait options à mon supportedInterfaceOrientation
propriétés.
Cependant, l'exploitation en mode portrait n'a vraiment pas de sens pour mon application. J'avais pensé que je pourrais utiliser shouldAutorotateToInterfaceOrientation
pour permettre à l'application d'aider "portrait", mais seulement être autorisé à tourner à portrait dans cette vue. Mais maintenant que la méthode est obsolète, et je ne peux pas utiliser la même technique avec shouldAutorotate.
Quelqu'un a une idée comment je peux contourner ce problème sous iOS 6.0?
- BTW, comme je l'ai été de l'enquête sur ce, j'ai compilé et exécuté l'exemple de code "Popovers" et il exécute parfaitement dans toutes les orientations sous Xcode 4.5 et iOS 6 Simulateur, donc je pense que c'est un bug dans UIImagePicker lors de la pris en charge de l'orientation du masque n'est pas Tout. La planification de fichier d'un bug si je peux en quelque sorte le prouver 😉
- Veuillez voir ma réponse pour les explications de ce bug
- Beaucoup de gens sont à l'aide de la solution de sous-classement UIImagePickerController, ce n'est vraiment pas la façon de le faire. Je attirer votre attention sur la documentation d'Apple qui indique spécifiquement:
The UIImagePickerController class supports portrait mode only. This class is intended to be used as-is and does not support subclassing
veuillez consulter ma réponse ici avec une Pomme approuvé solution: stackoverflow.com/a/12575058/662605 - Apple a corrigé ce bug dans iOS 6.1, s'il vous plaît vérifier cette réponse pour la solution de contournement: stackoverflow.com/a/12575058/662605
- Cette réponse m'a aidé à corriger l'orientation de crash lors de la game center boîte de dialogue de connexion essayé de popup quand mon jeu était à ses débuts. Le jeu ne jamais s'est écrasé lorsque vous êtes déjà connecté à GC. Mais lorsque vous vous déconnectez à l'extérieur du jeu et de commencer le jeu, puis il a été s'écraser, La top réponse m'a aidé à le résoudre.
Vous devez vous connecter pour publier un commentaire.
iOS 6.1 - fixe
Comme de l'iOS 6.1, cela ne se produit plus, il est très important de suivre mes conseils afin d'éviter un crash sous iOS 6.0.x, le ci-dessous s'applique toujours à que les.
iOS 6.0.x solution de contournement
C'est en fait un bug dans iOS 6.0, cela devrait être corrigé dans les futures versions du logiciel iOS.
Un ingénieur d'Apple, a expliqué ce bug et une solution de contournement: https://devforums.apple.com/message/731764
Ce qui se passe parce que l'Application veut orientation paysage, mais certains Cocoa Touch Afficher les Contrôleurs exigent strictement orientation Portrait qui est l'erreur - non pas qu'ils doivent être exigeant plus de Portrait, mais leur interprétation des besoins des Applications.
Un exemple de ce que peut être la suivante:
D'autres cadres qui ont été signalés comme étant problématiques incluent le Centre de Jeu de connexion view controller.
La solution est assez simple, mais pas idéal... Vous gardez les orientations correctes déclaré dans votre info.plist/projet volet d'informations, mais dans l'Application de Délégué de classe, vous déclarez que vous permettre à toutes les orientations.
Maintenant, chaque point de Vue Contrôleur de vous ajouter à la fenêtre doit spécifier lui-même qu'il ne peut être le Paysage. Veuillez vérifier le lien pour plus de détails.
Je ne peux pas insister sur la façon dont beaucoup vous ne devriez pas être sous-classement
UIImagePickerController
que la solution retenue est d'insister vous ne.La chose importante ici est "Cette classe est destiné à être utilisé comme tel et ne prend pas en charge les sous-classement."
Dans mon cas, j'ai ajouté ceci à ma demande du délégué (j'ai un paysage seule application), ce qui signifie que le sélecteur d'images qu'il peut afficher, parce que le portrait est pris en charge:
Et puis de mon point de vue contrôleur qui est arrivé à être un
UINavigationController
, j'ai inclus une catégorie à la suivante:Maintenant, mon application ne permet pas de tourner, et le sélecteur d'images demande le délégué s'il peut afficher que le portrait et il dit que c'est normal. Donc tout se joue bien.
J'ai eu un problème similaire, mais dans un iPad paysage app. J'ai présenté le sélecteur d'images dans une liste. Il s'est écrasé sous iOS 6. L'erreur a suggéré que le sélecteur voulais portrait, mais l'app seulement offert à la vue paysage, et ... surtout ... le sélecteur de shouldRotate était de retour OUI.
J'ai ajouté à mon ViewControllerClass.m qui est de la création du sélecteur de
et ensuite utilisé cette classe au lieu
Qui a résolu le problème pour moi. Votre situation est un peu différente, mais elle sonne comme fondamentalement la même erreur.
The UIImagePickerController class supports portrait mode only. This class is intended to be used as-is and does not support subclassing
veuillez consulter ma réponse ici avec une Pomme approuvé solution: stackoverflow.com/a/12575058/662605Tandis que le sous-classement UIImagePickerController œuvres, une catégorie est une meilleure solution:
Des rapports à partir d'iOS 7.1:
En outre à ce que les réponses ci-dessus, préciser, il semble que vous devez absolument activer le mode portrait dans l'info.plist.
Sans cela, aucun code ci-dessus/correctifs travaillé pour moi.
Résoudre le problème, mais à partir de iOs7