2

Mon application plante lorsque j'essaie d'accéder à une méthode dans parentViewController. Voici la mise en page StoryBoardiOS Accès à la propriété dans parentViewController

enter image description here

MainViewController = STLMMainViewController (ParentViewController)

Scene1 = STLMTimeDateViewController (ChildViewController)

Voici le code pour STLMTimeDateViewController

#import "STLMTimeDateViewController.h" 
#import "STLMMainViewController.h" 

@interface STLMTimeDateViewController() 
@property (nonatomic, strong) STLMMainViewController *stlmMainViewController; 
@end 


- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    NSLog(@"The name of the controller %@",self.navigationController.parentViewController); 

    stlmMainViewController= (STLMMainViewController *) self.parentViewController; 
    [stlmMainViewController locationButtonSelected]; // This is where the App crashes 
    NSLog(@"TimeDateController"); 
} 

L'App Fonctionne, mais lorsque STLMMainViewController est appelé, l'application accidents avec l'erreur suivante:

2013-02-10 16:33:57.422 MyApp[9120:c07] The name of the controller <STLMMainViewController: 0x83850d0> 
2013-02-10 16:33:57.434 MyApp[9120:c07] -[UINavigationController locationButtonSelected]: unrecognized selector sent to instance 0x8371a70 

Si je supprime la ligne suivante:

stlmMainViewController = (STLMMainViewController *) self.parentViewController; 

et juste laisser

[stlmMainViewController locationButtonSelected]; 

L'application fonctionne, pas d'erreur, mais la méthode suivante dans [ STLMMainViewController locationButtonSelected] n'est pas appelé (je ne vois jamais le journal):

-(void)locationButtonSelected 
{ 
    [LocationButton setSelected:YES]; 
    [eatDrinkbutton setSelected:NO]; 
    [timeCalButton setSelected:NO]; 
    [carButton setSelected:NO]; 
    [contactButton setSelected:NO]; 
    NSLog(@"LocationButtonSelected Method"); 
} 

Toutes les propriétés de la méthode locationButtonSelected et la méthode elle-même sont déclarées dans .h de STLMMainViewController pour un accès public.

Merci

+1

La référence de classe pour UIViewController sur les sites de développement Apple indique ceci pour parentViewController ... Si le destinataire est un enfant d'un contrôleur de conteneur, cette propriété contient le contrôleur de vue dans lequel il est contenu. Si le destinataire n'a pas de parent, la valeur dans cette propriété est nulle. Avant iOS 5.0, si une vue n'avait pas de contrôleur de vue parent et était présentée, le contrôleur de vue de présentation était renvoyé. Sur iOS 5, ce problème ne se produit plus. À la place, utilisez la propriété presentingViewController pour accéder au contrôleur de présentation. Peut-être essayer de présenterViewController – chuthan20

Répondre

3

Vous pouvez essayer ceci:

self.stlmMainViewController= (STLMMainViewController *)self.navigationController.parentViewController; 

(EDIT:. En fait, comme quelqu'un d'autre vient de signaler, vous pouvez utiliser presentingViewController à la place)

Il semble que vous avait bien dans le message de journal juste avant cela. Vous voulez le parent de votre contrôleur de navigation dans ce cas. Par ailleurs, la raison pour laquelle vous ne plantez pas lorsque vous supprimez cette ligne est que vous finissez par envoyer le locationButtonSelected à zéro. Ça ne va pas tomber, mais ça ne fera rien non plus.

+0

Cela a fonctionné magnifiquement! Merci pour le code et l'explication @Firoze Bhai. – user1107173

+0

Je suis content que ça a marché. –

Questions connexes