Je travaille dans l'objectif-C en essayant d'écrire une application iPhone. Arrière-plan: Un contrôleur de navigation gère mes contrôleurs de vue. Mon FirstLevelViewController sur viewDidLoad crée quelques objets SecondLevelViewController, les stocke dans un tableau, puis les charge lorsque plusieurs cellules de tableau sont poussées. En outre, sur viewDidLoad, mon FirstLevelViewController crée en instance d'une classe pour contenir des variables sur cet objet. Il pourrait y avoir plusieurs instances de cette classe, et donc je préférerais ne pas créer un singleton.Comment envoyer un message à un objet?
Les différents contrôleurs de vue souhaitent envoyer un message à l'objet de données. Comment je fais ça? Le firstlevelviewcontroller peut lui envoyer un message parce qu'il a créé au moins le premier. Les contrôleurs de vue de second niveau agissent comme s'ils ne savaient pas que l'objet de données existe.
Je connais son fonctionnement de base. Je sais qu'il y a beaucoup de connaissances sur le sens de la vie, de l'univers et de tout. Le délégué de l'application de réponse est-il Pas dans la façon de cacher des données singleton, mais comme un moyen de message entre les classes? Ai-je besoin de références ou de pointeurs?
J'apprécie vraiment l'aide. J'ai perdu sommeil pendant une semaine et je perds mes billes. Je vous remercie.
FirstLevelViewController
#import <Foundation/Foundation.h>
@interface FirstLevelViewController : UITableViewController
<UITableViewDataSource, UITableViewDelegate> {
NSArray *controllers;
}
@property (nonatomic, retain) NSArray *controllers;
@end
#import "FirstLevelViewController.h"
#import "BirthDay.h"
#import "Height.h"
#import "Model.h"
@implementation FirstLevelViewController
@synthesize controllers;
-(void)viewDidLoad {
NSMutableArray *array = [[NSMutableArray alloc]init];
Model *frank = [[Model alloc]init];
frank.date = @"Oh No You Didn't";
self.title = [frank date];
BirthDay *birthday = [[BirthDay alloc]initWithNibName:@"Birthday" bundle:nil];
birthday.title = @"Birth Date";
[array addObject:birthday];
[birthday release];
Height *height = [[Height alloc]initWithNibName:@"Height" bundle:nil];
height.title = @"Height";
[array addObject:height];
[height release];
self.controllers = array;
ModelClass (classe données)
#import <Foundation/Foundation.h>
#import "FirstLevelViewController.h"
#import "BirthDay.h"
#import "model.h"
@interface Model : NSObject {
NSString *date;
}
@property (nonatomic, retain) NSString *date;
@end
#import "Model.h"
@implementation Model
@synthesize date;
@end
SecondLevelViewController
@interface BirthDay : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource>{
UILabel *dateLabel;
UIPickerView *datePicker;
}
@property (nonatomic, retain) IBOutlet UILabel *dateLabel;
@property (nonatomic, retain) IBOutlet UIPickerView *datePicker;
@end
#import "BirthDay.h"
#import "FirstLevelViewController.h"
#import "Model.h"
@implementation BirthDay
@synthesize datePicker;
@synthesize dateLabel;
-(IBAction)updateLabel {
NSDate *dateOfBirth = [datePicker date];
NSDate *todaysDate = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSUInteger unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *components = [gregorian components:unitFlags fromDate:dateOfBirth toDate:todaysDate options:0];
NSInteger months = [components month];
NSInteger days = [components day];
float Months = months;
if (days > 14) {
Months = Months + 0.5;
}
NSString *message = [[NSString alloc]initWithFormat: @"%.1f Months and %d Days old", Months, days];
dateLabel.text = message;
}
@end
(En fait, je voudrais que l'étiquette de mise à jour lorsqu'elle est appelée à mettre à jour non seulement l'étiquette, mais aussi l'objet nommé franc.)
Puis-je envoyer des notifications directement à Frank? – Justagruvn