2009-05-23 5 views
1

cette façon fonctionne:iphone cacao « erreur: demande de membre ____ dans quelque chose pas une structure ou d'une union »

type1ViewController *viewController = [[type1ViewController alloc] initWithNibName:@"Type1View" bundle:nil]; 
viewController.parentViewController = self; 
self.type1ViewController = viewController; 
[self.view insertSubview:viewController.view atIndex:0]; 
[viewController release]; 

mais cette façon me donne l'erreur, « demande de membre parentViewController dans quelque chose pas une structure ou union ":

type1ViewController *viewController = [[type1ViewController alloc] initWithNibName:@"Type1View" bundle:nil]; 
self.type1ViewController = viewController; 
self.type1ViewController.parentViewController = self; 
[self.view insertSubview:viewController.view atIndex:0]; 
[viewController release]; 

Je ne vois pas pourquoi cela devrait être différent. Qu'est-ce que le compilateur voit qu'il n'aime pas? Merci pour votre aide à l'avance

Répondre

4

Lorsque vous appelez self.type1ViewController.parentViewController au lieu de viewController.parentViewController, il te donne une erreur parce que vous avez self.type1ViewController déclaré que certains superclasse, pas type1ViewController. Lorsque le compilateur regarde cette déclaration, il ne va pas trouver la propriété parentViewController, donc il vous donne l'erreur.

Dans le premier exemple, viewController est toujours déclaré en tant que type1ViewController, donc cela fonctionne correctement. Cela fonctionnerait toujours dans le deuxième exemple si vous le convertissez en un type1ViewController, mais bien sûr, il vaut mieux simplement modifier la déclaration.

+0

Bien que ce ne soit pas évident, j'espérais que les gens le comprendraient, mais je devrais préciser que ce code est dans la classe "ParentViewController" qui contient une propriété type1ViewController de la classe Type1ViewController. Type1ViewController est déclaré avec une propriété parentViewController de type ParentViewController. alors dans ce cas, je ne suis pas sûr de comprendre totalement votre réponse. Est-ce juste le double? syntaxe qui dérange le compilateur? Dans le fichier d'en-tête de ParentViewController, self.type1ViewController est déclaré en tant que Type1ViewController. ce qui serait coulé pour le faire fonctionner de cette façon? –

0

Si la propriété type1ViewController de ParentViewController est déclarée avec une classe de Type1ViewController, la première ligne devrait être:

Type1ViewController *viewController = [[type1ViewController alloc] initWithNibName:@"Type1View" bundle:nil]; 

pas:

type1ViewController *viewController = [[type1ViewController alloc] initWithNibName:@"Type1View" bundle:nil]; 

Notez la majuscule. Je suis en fait un peu surpris que cela compilé sans erreurs ou avertissements.

0

Je voudrais également vérifier votre fichier NIB pour votre Type1ViewController. J'ai rencontré des problèmes où cette erreur serait jetée dans les points de vente de référence sur la plume cherchaient quelque chose d'autre que le contrôleur de vue personnalisé que j'ai créé.

Questions connexes