2010-01-19 6 views
0

Dans un cours .h j'aiComment pouvez-vous partager des ivars entre les classes?

NSMutableArray *rountines; 

et dans un autre cours .m que je veux faire quelque chose comme ça

[routines addOject:@"Hello]; 

l'autre classe est un type ModalViewController mis en place. Donc, en gros, j'aimerais que le fichier .m du MVC puisse lire, éditer et faire d'autres choses aux ivars que je déclare dans l'en-tête.

Cheers,

Sam

modifier

Un autre exemple, qui est similaire à ce que im essayant d'atteindre est comme un écran d'édition.

Répondre

0

you can either do this by making the ivars you want to share globals (auquel cas ils seraient Ivars de la classe singleton ou une application de classe déléguée) ou en passant une référence à la classe que vous souhaitez modifier les Ivars comme un argument à une méthode de la classe ModalViewController:

@implementation ModalViewController 
...... 
-(void)addObjectToRoutinesFromClass: (MyClass *)myclass { 
     [myclass.routines addObject:@"Hello"]; 
} 

@implementation MyClass 
    ...... 
    ModalViewController *myModalViewController = [[ModalViewController alloc] init]; 
[myModalViewController addObjectToRoutinesFromClass:self]; 

@end 
+0

merci, mais comment puis-je faire cela? : S "newbie" ici –

+0

Les variables d'instance ne sont pas globales, elles appartiennent à une instance d'un objet. –

+0

@darren .... Les globals d'objectifs-c sont des ivars de la classe que vous les définissez dans lesquels j'ai clarifié dans la réponse. – ennuikiller

2

Vous ne pouvez pas vraiment partager des ivars entre classes. ivar signifie variable d'instance, et c'est une variable qui appartient à une instance particulière d'un objet. La façon de résoudre ce problème est de permettre à d'autres objets d'accéder à l'état de cet objet. Ceci est le plus souvent fait par des méthodes setter et getter. Objective-C 2.0 rend cela plus facile en fournissant les mots-clés @property et @synthesize.

Si vous aviez accès à l'objet qui avait le tableau des routines, vous pouvez y accéder via sa propriété (méthode getter) comme ceci:

[[someObject routines] addObject:@"hello"]; 
+0

Vérifiez également cela et lisez sur les propriétés déclarées: http://developer.apple.com/mac/library/documentation/cocoa/conceptual/ObjectiveC/Introduction/introObjectiveC.html – Nimrod

+0

propriétés peuvent être accessibles comme someObject.routines aussi. Donc [someobject.routines addObject: @ "yello"]; – CVertex

+0

est-ce que 'someObject' serait la classe dans laquelle il vivait, ou quoi? Pouvez-vous expliquer cela un peu plus loin? –

Questions connexes