2013-09-10 11 views
0

Я реализую приложение iOS с шаблоном проектирования MVC.MVC: Прохождение методов в разных классах

Приложение имеет 5 интерфейсов и я продолжил таким образом:

  • AppDelegate (CONTROLLER);
  • WebServiceModel (MODEL);
  • 5 интерфейсов, которые представляют 5 видов приложения (VIEWS).

В модели я применил метод, который отправляет сообщения веб-службе для запроса данных. В соответствии с MVC контроллер должен получать данные от Модели и отправлять их в Вид, поэтому в Контроллере я реализовал метод, который вызывает метод Модели. В представлении я создаю экземпляр объекта Controller и вызываю метод Controller. Когда приложение запускается, Xcode запускает только команды метода AppDelegate (Controller) без чтения вызова метода Model.

Приносим извинения, если рассуждение скручено. Вкратце:

// AppDelegate.h 

#import "WebServiceModel.h" 
@interface AppDelegate: UIResponder <UIApplicationDelegate> { 
WebServiceModel *model; 
} 

@property (retain, nonatomic) WebServiceModel *model; 
- (void) func; 
_________________ 

// AppDelegate.m 

@implementation AppDelegate 
@syntesize model; 

- (void) func { 
    NSLog(@"OK!"); 
    [model function]; 
} 
@end 
_________________ 

// WebServiceModel.h 

#import "AppDelegate.h" 
@interface WebServiceModel: NSObject <NSXMLParserDelegate> { 
AppDelegate *controller; 
} 

- (void) function; 
_________________ 

// WebServiceModel.m 

@implementation WebServiceModel 

- (void) function { 
    NSLog(@"YES!"); 
    //other instructions 
} 
@end 
_________________ 

// View Controller.h 

#import "AppDelegate.h" 
@interface ViewController: UIViewController { 
AppDelegate *controller; 
} 

_________________ 

// ViewController.m 

@implementation ViewController 

- (void) viewDidLoad { 
    NSLog(@"OH!"); 
    controller = (AppDelegate *) [[UIApplication sharedApplication] delegate]; 
    [controller func]; 
} 
@end 

Когда приложение запускается, в «Все выходные» вы видите только «ОН!». и «ОК!», но нет «ДА!».

Потому что метод «функции» модели не называется?

Спасибо тем, кто отвечает мне!

ответ

0

Фактически вы не создали экземпляр объекта модели, так что на самом деле происходит то, что вы вызываете -функцию на нуле. Закрепление это легко, добавьте следующий метод AppDelegate:

- (id)init 
{ 
    self = [super init]; 
    if (nil != self) 
    { 
    self.model = [[WebServiceModel alloc] init]; 
    } 
    return self; 
} 
+0

Большое спасибо, вы правы, но я бы понял, если я применил хорошо шаблон проектирования MVC: Я сделал 5 интерфейсов, соответствующих 5 классов ViewController. Я хорошо, или я создал один вид, и мне нужно настроить интерфейсы в Interface Builder? – ginosal

+0

В этом случае вы можете создать свой слой вида столько, сколько хотите. Дело в том, что модельный слой является отдельным, и, следовательно, объект модели должен управляться независимо от уровня представления. –

+0

Хорошо, еще раз спасибо – ginosal

Смежные вопросы