2011-03-04 3 views
0

У меня есть этот код в моем ViewController:Делегат не работает

- (GraphModel *)graphModel 
{ 
    if (!graphModel) { 
     graphModel = [[GraphModel alloc] init]; 
     NSLog(@"graphModel = %@", graphModel); 
    } 
    return graphModel; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.graphView.delegate = [self graphModel]; 
    NSLog(@"self.graphview.delegate = %@", self.graphView.delegate); 
    [self updateUI]; 
} 

но NSLog просто говорит (нуль) для self.graphview.delegate даже несмотря на то, NSLog в graphModel говорит, что я успешно создан объект. Как это может быть?

это код graphViewDelegate

@class GraphView; 

@protocol GraphViewDelegate 
- (double)yValueForGraphView:(GraphView *)requestor atPosition:(int)i withPrecision:(int)precision; 
- (double)scaleForGraphView:(GraphView *)requestor; 
@end 

@interface GraphView : UIView { 
    id <GraphViewDelegate> delegate; 
} 

@property (assign) id <GraphViewDelegate> delegate; 

@end 

и тогда я @synthesize delegate в graphView.m

ответ

3

Скорее всего догадка: graphView равна нулю. Вызов любого метода для объекта nil не влияет и возвращает nil, а .delegate на самом деле является вызовом геттера или сеттера, если это необходимо. Я рекомендую вам добавить:

NSLog(@"self.graphview = %@", self.graphView); 

В качестве быстрой проверки.

+0

когда память графического представления настраивается? Я думал, что это было сделано автоматически? – ladookie

+1

Экземпляры автоматически не присваиваются переменным-членам. Если ваш член graphView является IBOutlet и подключен к чему-то в Interface Builder, вы можете предположить, что он должен быть загружен после получения viewDidLoad. Если вы похожи на меня, вы, возможно, подключили его к интерфейсу Builder, но не сохранили свой XIB, переключились на Xcode и создали более старую копию. – Tommy

+0

Да, graphView - это IBOutlet, и я просто понял, что забыл подключить его к интерфейсу, LOL. Благодарю. – ladookie

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