Question

Normalement, j'ai été variable passant autour des méthodes d'initialisation, mais je ne peux pas le faire cette fois-ci parce que j'ai var dans une classe ViewController affiché à l'aide d'une barre d'onglets et je besoin d'y accéder d'une classe de ViewController différent quand une autre barre d'onglets est pressée. Je crois comprendre que vous pouvez accéder à l'aide vars @property mais il travaille maintenant si je fais quelque chose de mal. Voici ce que j'ai:

Class 1 Header file

@interface DailyViewController : UIViewController <UIActionSheetDelegate> {

NSDate *today;

}

@property (readwrite, nonatomic, retain) NSDate *today;



Class 2 implementation file:


- (void)viewWillAppear:(BOOL)animated{

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterLongStyle];
[formatter setTimeStyle:NSDateFormatterNoStyle];
DailyViewController *otherClass = [[DailyViewController alloc] init];   

NSString* todayString = [formatter stringFromDate:otherClass.today];
r_todayLabel.text = todayString;
[otherClass release];
[formatter release];

}

Était-ce utile?

La solution

Vous devez récupérer l'objet DailyViewController * de votre AppDelegate (ou partout où il est stocké) et récupérer la date de celui-ci.

Vous créez un nouveau DailyViewController * objet, pas initialiser avec sa date, et l'accès à son champ de date (qui sera égal à zéro par défaut).

Quelque chose comme

MyAppDelegate* appDelegate = [[UIApplication sharedApplication] delegate];
DailyViewController *otherClass = appDelegate.dailyViewController;
NSDate* dailyViewToday = otherClass.today;

Cependant tout ce qui viole beaucoup de règles de bonne programmation.

Tout d'abord, vous devriez viser MVC (Model View Controller), si votre date « aujourd'hui » doit être stocké dans votre modèle. Ensuite, les deux classes pourraient accéder aujourd'hui à partir du modèle plutôt que du contrôleur de un point de vue et il n'y aurait pas besoin de classe 2 pour accéder au DailyViewController du tout et donc pas besoin de stocker une référence dans le AppDelegate, ce qui est une mauvaise idée car il n'a rien à voir avec la délégation pour la UIApplication et est vraiment juste une variable globale déguisée.

Autres conseils

Sans avoir

@synthesize today;

dans votre fichier « Class1.m », les méthodes getter et setter pour aujourd'hui ne sont jamais créés. Cela signifie que votre propriété ne peut pas être modifiée ou vu de l'extérieur.

Dans le fichier source "Class1.m" avez-vous

@synthesize today;

Vous devez initialiser aujourd'hui, par exemple dans le constructeur de DailyViewController ajouter ce qui suit:

self.today = [NSDate date];

En regardant la réponse de Pierre ( «Tout d'abord, vous devriez viser MVC (Model View Controller), de sorte que votre « date d'aujourd'hui » doit être stocké dans votre modèle. Ensuite, les deux classes pourraient accéder aujourd'hui à partir du modèle plutôt que d'un contrôleur de vue et il n'y aurait pas besoin de classe 2 pour accéder au DailyViewController du tout et donc pas besoin de stocker une référence dans le AppDelegate, ce qui est une mauvaise idée car il n'a rien à voir avec la délégation pour la UIApplication et vraiment juste une variable globale déguisée. »), j'ai une question.

Comment les deux classes accéder au modèle? Est-ce que l'appel init pour chaque contrôleur de vue être transmis dans un pointeur sur le modèle? (C.-à-la AppDelegate crée l'objet modèle, puis passe le pointeur sur chacune des méthodes d'initialisation du contrôleur de vue?)

Sal

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top