2010-12-08 11 views
2

Je cherche simplement des moyens d'accéder à un objet modèle simple (au sens MVC) depuis mon contrôleur. En ce moment je crée le modèle dans l'applicationDelegate, et le passe au contrôleur quand je crée le contrôleur.Lier modèle à contrôleur dans une application simple?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

    // Setup Model 
    DataModel *tempDataModel = [[DataModel alloc] init]; 
    [self setDataModel:tempDataModel]; 
    [tempDataModel release]; 

    // Setup Controllers 
    Controller *rootController = [[Controller alloc] initWithModel:[self dataModel]]; 
    UINavigationController *tempNavController = [[UINavigationController alloc] initWithRootViewController:rootController]; 
    [self setNavController:tempNavController]; 
    [rootController release]; 
    [tempNavController release]; 

    [window addSubview:[[self navController] view]]; 
    [window makeKeyAndVisible]; 
    return YES; 
} 

à l'intérieur du contrôleur I ont:

@property (nonatomic, retain)DataModel *dataModel; 

et:

- (id)initWithModel:(id)newModel { 
    self = [super init]; 
    if(self) { 
     NSLog(@"%s", __PRETTY_FUNCTION__); 
     dataModel = [newModel retain]; 
    } 
    return self; 
} 

- (void)dealloc { 
    NSLog(@"%s", __PRETTY_FUNCTION__); 
    [dataModel release]; 
    [super dealloc]; 
} 

Cela fonctionne très bien, mais je suis juste curieux de savoir si cela est correct en termes de MVC et de bonne conception. Dans les applications précédentes, j'ai:

  1. occasion d'une instance Partagée (Singleton)
  2. a créé le modèle de l'intérieur du contrôleur.

Les commentaires me apprécié:

Répondre

2

Je pense que cela est parfaitement bon design. Le contrôleur est autorisé à manipuler le modèle, il a donc besoin d'une référence à cela. Je pense que votre façon actuelle d'injecter l'instance Model est meilleure qu'une approche singleton.