2010-05-08 4 views
1

Bonjour, je suis en train de définir les attributs d'un viewcontroller imbriqué dans un NSMutableArray, par exemple, j'ai 3 ViewController dans ce tableau:iPhone Configuration ViewController niché dans NSMutableArray

FirstViewController *firstViewController = [FirstViewController alloc]; 
SecondViewController *secondViewController = [SecondViewController alloc]; 
ThirdViewController *thirdViewController = [ThirdViewController alloc]; 


NSMutableArray *viewControllerClasses = [[NSMutableArray alloc] initWithObjects: 
             firstViewController, 
             secondViewController, 
             thirdViewController,          
             nil]; 


for (int x=0; x<[viewControllerClasses count]; x++) { 

    // as an example to set managedObjectContext I otherwise would set firstViewController.managedObjectContext = context; 

    [viewControllerClasses objectAtIndex:x].managedObjectContext = context; 
} 

Mais cela se traduit par une erreur: Demande de membre "managedObjectContext" dans quelque chose qui ne soit pas une structure ou une union. Ne devrait pas être "firstViewController" être le même que [viewControllerClasses objectAtIndex: 0]?

Répondre

3

La méthode -objectAtIndex: renvoie un id, sur lequel la syntaxe ne peut pas être appliquée car le compilateur ne peut pas déterminer le getter.

Quoi qu'il en soit, vous devez simplement utiliser l'énumération rapide (boucle for/in), et vous pouvez donner un type statique de sorte que le point-syntaxe peut être utilisée (en supposant FirstViewController et le reste hérite de BaseViewController):

for (BaseViewController* ctrler in viewControllerClasses) 
    ctrler.managedObjectContext = context; 

En outre, vous pouvez revenir à utiliser entre parenthèses: (. et s'il vous plaît -init… immédiatement après +alloc)

for (BaseViewController* ctrler in viewControllerClasses) 
    [ctrler setManagedObjectContext:context]; 

+0

Je reçois la même erreur avec cette méthode. –

+0

@Pater: voir mise à jour. – kennytm

+0

Merci, mais j'ai toujours le même problème. J'ai importé BaseViewController.h et hérité FirstViewController: BaseViewController dans le FirstViewController.h, et le même pour le reste des contrôleurs. J'ai aussi créé les fichiers BaseViewController qui héritent d'un UIViewController normal –

0

Vous pouvez essayer casting [viewControllerClasses objectAtIndex:x] retourne un NSObject qui ne arbitraire pas managedObjectContext propriété, donc essayez d'utiliser ((FirstViewController *)[viewControllerClasses objectAtIndex:x]).managedObjectContext = context;

+0

Cela fonctionne, mais élimine l'utilisation de mon tableau, dans lequel je voulais définir tous les viewcontroller dans le tableau avec des propriétés. –

+0

Vous pouvez toujours le faire dans le cadre de. Avec le meilleur scénario, tous vos viewcontrollers étendraient un "ZeroViewController" avec la propriété managedObjectContext et vous pourriez ensuite lancer le cast dans le for. Mais je pense que si tous vos viewcontrollers (quel que soit le nom de la classe) ont cette propriété, cela n'a pas d'importance, tant que la classe a la propriété. – texmex5

Questions connexes