2010-09-18 4 views
2

Quand je regarde dans la console que je reçois ce messageUIActionSheet tombe en panne sur iPad/non iPhone

 
2010-09-18 17:04:05.284 Wasted Time[8998:207] *** Assertion failure in -[UIActionSheet showInView:], /SourceCache/UIKit_Sim/UIKit-1145.66/UIAlert.m:7073 
2010-09-18 17:04:05.286 Wasted Time[8998:207] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: view != nil' 
2010-09-18 17:04:05.286 Wasted Time[8998:207] Stack: (
    42272848, 
    43430700, 
    42010379, 
    811796, 
    3796273, 
    3862560, 
    9631, 
    3616645, 
    3688229, 
    3682846, 
    3690662, 
    3686119, 
    4983946, 
    71264534, 
    71263781, 
    71207378, 
    71206706, 
    3003734, 
    3030334, 
    3011831, 
    3043800, 
    51265916, 
    41552028, 
    41547944, 
    3002913, 
    3036018, 
    8314 
) 
terminate called after throwing an instance of 'NSException' 

Le code est le suivant:

- (void)viewDidLoad { 
    BOOL continueYesNo; 
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
    continueYesNo = [prefs boolForKey:@"keyContinueMeeting"]; 
    if (continueYesNo) { 
     NSString *message_continue = [[NSString alloc] initWithFormat:@"Do you want to Continue the Prior Meeting"]; 
     UIActionSheet *actionSheet = [[UIActionSheet alloc] 
      initWithTitle:message_continue 
      delegate:self 
      cancelButtonTitle:@"Reset" 
      destructiveButtonTitle:@"Continue" 
      otherButtonTitles:nil]; 
     [actionSheet showInView:self.view]; 
     [actionSheet release]; 
     [message_continue release]; 
    } 
} 

Il fonctionne bien à la fois dans l'iPhone et dans le simulateur iPhone, mais se bloque dans le simulateur de l'iPad.

Répondre

5

Le message d'erreur indique:

Paramètre non valide pas satisfaisant: voir = nul

probable de cette ligne:

[actionSheet showInView:self.view]; 

Puisque vous dites que cela fonctionne sur iPhone, mais pas iPad, cela signifie que le chemin de code que l'iPad emprunte pour atteindre cette ligne est probablement différent de celui que l'iPhone emprunte pour atteindre cette ligne. Ce qui signifie que la propriété view du contrôleur de vue n'est probablement pas définie pour l'iPad.

Ma conjecture: vous avez oublié de brancher la sortie view dans Interface Builder pour la version iPad du xib que ce contrôleur de vue utilise.

+0

Merci pour la réponse rapide. Cela fait beaucoup de sens, mais je n'ai pas de fichier NIB séparé pour la version iPad Dans une version antérieure de l'application, j'avais utilisé la commande -> Projet, mise à niveau de la cible actuelle pour l'iPad –

+0

Eh bien, votre message d'erreur dit un assert est soulevé de '[UIActionSheet showInView:]' parce que –

+0

Merci d'avoir créé de nouveaux XIB pour chacun des 3 TabView dans mon contrôleur TabView .. me permet de créer un bien meilleure interface iPad .. votre question m'a eu dans la bonne direction ... Cependant, lorsque j'ai créé de nouveaux XIB pour les versions iPad et les ai connectés au mainwindow-ipad.xib (le TabViewController), j'obtiens maintenant une nouvelle erreur d'exécution différente qui posera une nouvelle question pour celui-là. –

0

comme cela:

[self performSelectorOnMainThread:@selector(choosePhoto) withObject:nil waitUntilDone:NO]; 

-(void)choosePhoto 
{ 

    UIActionSheet* actionSheet = [[UIActionSheet alloc] initWithTitle:@"" 
                delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil 
             otherButtonTitles:@"Take Photo", @"Choose from gallery", nil]; 
    actionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque; 
    actionSheet.tag = 1; 
    [actionSheet showInView:self.view]; 
    [actionSheet release]; 
} 

travaillé pour moi

+0

Merci .. J'ai été capable de résoudre en utilisant le pointeur parent. Signalisera ceci pour de futurs contrôles. –

+0

bien .. cela ne semble pas fonctionner sur la dernière version de xCode ... app traps avec à la fois ma solution ci-dessus de [actionSheet showInView: self.parentViewController.view]; et les deux fonctionnent autour énumérés ... Retour à la planche à dessin ... –

3

J'ai aussi eu ce problème, mais j'utilisais [actionSheet showInView:[self.view window]]; (pour corriger un bug où seulement la moitié du bouton d'annulation peut être sélectionnée).

Maintenant, je change cela conditionnellement à [actionSheet showInView:self.view]; sur l'iPad.

J'ai trouvé qu'il est préférable de ne pas UIActionSheetStyleBlackTranslucent sur l'iPad non plus - l'iPad a son propre style, et le réglage semble ajouter le bouton Annuler (qui par défaut sur l'iPad n'est pas montré).

+0

OK .. vais essayer cela, j'ai trouvé que sur la dernière version de mon truc .parentViewController ne fonctionne pas ... App est juste s'écraser à chaque fois .. –

+0

NB: L'utilisation de la fenêtre entraînera l'affichage incorrect par l'iPhone de la feuille d'action – amleszk

0

Je crois que le problème est que la vue n'est pas encore apparue. Mettez-le dans viewDidAppear: et cela devrait fonctionner correctement.

0

Pour ceux comme moi qui peuvent être en utilisant un peu différemment UIActionSheet que dans la question initiale, mais toujours défaut sur iPad, j'utilisais:

[actionSheet showFromRect:m_view.bounds inView:m_view animated:YES]; 
[actionSheet release]; 

... qui fonctionne sur l'iPhone, mais échoue sur iPad .

Cet exemple fonctionne dans mon application particulier sur les deux appareils:

[actionSheet showInView:m_view]; 
[actionSheet release]; 

Cordialement, David

0

C'est une vieille question, mais j'ai rencontré le même problème aujourd'hui. J'ai un fichier xib pour un UIViewController qui est commun à l'iPhone et l'iPad, et la méthode showInView sur le UIActionSheet provoquait le crash de l'application iPad.

Il s'est avéré appeler showInView dans le viewDidAppear, au lieu de viewDidLoad l'a fixé pour moi. Peut-être que toutes les connexions IB n'ont pas été faites au moment où viewDidLoad a été appelé sur iPad.

(mon UIViewController a été poussé sur un UINavigationController, alors je me demande si le temps d'animation accrue est ce qui a causé l'ensemble issue_

Questions connexes