2012-03-13 2 views
0

J'essaie d'afficher une vue qui contient des détails sur le compte de l'utilisateur. Étant relativement nouveau pour le développement iOS, le code suivant est ce qui devrait fonctionner (basé sur les docs et les recherches). Cependant, l'application se bloque et je reçois une erreur indiquant sélecteur non reconnu:Affichage d'une nouvelle vue dans IOS

2012-03-13 16:32:25.616 UrbanAgendaApp[4993:207] Displaying profile view 
2012-03-13 16:32:25.635 UrbanAgendaApp[4993:207] -[UAFirstViewController presentViewController:animated:completion:]: unrecognized selector sent to instance 0x4b45240 
2012-03-13 16:32:25.674 UrbanAgendaApp[4993:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UAFirstViewController presentViewController:animated:completion:]: unrecognized selector sent to instance 0x4b45240' 
*** Call stack at first throw: 
(
    0 CoreFoundation      0x00fbabe9 __exceptionPreprocess + 185 
    1 libobjc.A.dylib      0x0110f5c2 objc_exception_throw + 47 
    2 CoreFoundation      0x00fbc6fb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187 
    3 CoreFoundation      0x00f2c366 ___forwarding___ + 966 
    4 CoreFoundation      0x00f2bf22 _CF_forwarding_prep_0 + 50 
    5 UrbanAgendaApp      0x00002308 -[UAFirstViewController showProfileView] + 168 
    6 UrbanAgendaApp      0x00002254 -[UAFirstViewController myUaBtnTouch:] + 52 
    7 UIKit        0x00014a6e -[UIApplication sendAction:to:from:forEvent:] + 119 
    8 UIKit        0x000a31b5 -[UIControl sendAction:to:forEvent:] + 67 
    9 UIKit        0x000a5647 -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 527 
    10 UIKit        0x000a41f4 -[UIControl touchesEnded:withEvent:] + 458 
    11 UIKit        0x000390d1 -[UIWindow _sendTouchesForEvent:] + 567 
    12 UIKit        0x0001a37a -[UIApplication sendEvent:] + 447 
    13 UIKit        0x0001f732 _UIApplicationHandleEvent + 7576 
    14 GraphicsServices     0x00cbea36 PurpleEventCallback + 1550 
    15 CoreFoundation      0x00f9c064 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52 
    16 CoreFoundation      0x00efc6f7 __CFRunLoopDoSource1 + 215 
    17 CoreFoundation      0x00ef9983 __CFRunLoopRun + 979 
    18 CoreFoundation      0x00ef9240 CFRunLoopRunSpecific + 208 
    19 CoreFoundation      0x00ef9161 CFRunLoopRunInMode + 97 
    20 GraphicsServices     0x00cbd268 GSEventRunModal + 217 
    21 GraphicsServices     0x00cbd32d GSEventRun + 115 
    22 UIKit        0x0002342e UIApplicationMain + 1160 
    23 UrbanAgendaApp      0x00001c2a main + 170 
    24 UrbanAgendaApp      0x00001b75 start + 53 
    25 ???         0x00000001 0x0 + 1 
) 
terminate called after throwing an instance of 'NSException' 

La méthode où cela se produit est dans un procédé FirstViewController, qui est appelée à la suite d'une touche jusqu'à l'événement dans un bouton:

-(void)showProfileView { 
    NSLog(@"%@", @"Displaying profile view"); // *** 

    UAProfileView *profileView = [[UAProfileView alloc] init]; 

    [self presentViewController:profileView animated:TRUE completion:0]; 
} 

Ce UAProfielView est une sous-classe de UIViewController et a été créé avec un fichier .xib approprié. Donc, la question est: comment afficher cette nouvelle vue dans mon application iPhone? L'utilisation d'un storyboard n'est pas une option car je dois prendre en charge iOS 4.0.

+0

Votre 'self' (UAFirstViewController) plante parce qu'il ne comprend pas presentViewController: ... UAFirstViewController est-il une sous-classe de UIViewController? – amattn

+0

@amattn Oui, il s'agit d'une sous-classe de UIViewController. –

+0

Avez-vous essayé NULL pour l'achèvement au lieu de 0 déjà? –

Répondre

3

La documentation de presentViewController:animated:completion: indique qu'elle n'est prise en charge que sur iOS 5.0 et versions ultérieures. Vous avez mentionné le support pour iOS 4.0.

Essayez plutôt presentModalViewController:animated:. Sinon, utilisez un nagivationController et faites pushViewController:animated:

2

@Mike, assurez-vous que vous avez connecté la plume au propriétaire du fichier.

+0

La plume a été créée avec le contrôleur par Xcode. Je vais vérifier le propriétaire. –

1

Vraisemblablement, la classe de base de UAFirstViewController est également UIViewController? Recevez-vous des avertissements lorsque vous construisez?

J'utiliserais personnellement completion:nil, mais je ne pense pas que cela fera une différence. Par conséquent, si vous n'obtenez aucun avertissement, allumez les zombies et vérifiez si vous avez affaire à un objet mort. Les instructions sont ici

How to enable NSZombie in Xcode?

Exécutez le programme et voir si vous obtenez un avertissement de zombie dans la console. Si c'est le cas, la gestion de la mémoire est erronée.

Si tout cela est correct, postez le code où vous appelez showProfileView.

Questions connexes