我正在使用MVC模型,但我无法获取View所需的数据,我正在尝试使用数据源,因为View应该永远不会拥有其数据。通常,协议用于创建数据源。
目标是:当我按下计算器上的按钮时,它会绘制当前显示在其中的功能(例如:x + 5 =)。计算器部分负责表达/功能,显示等,同时绘图部分应绘制。 CalculatorViewController应该是GraphingView的源,但数据始终保持为空。
这是带有协议声明的GraphingView.h:
@class GraphingView;
@protocol GraphingViewSource
- (float)getDataPoints:(GraphingView *)requestor;
@end
@interface GraphingView : UIView {
id <GraphingViewSource> source;
}
@property (assign) id <GraphingViewSource> source;
@end
CalculatorViewController.m通过实现getDataPoints:方法来实现协议。 CalculationViewController.h的标题:
@interface CalculatorViewController : UIViewController <GraphingViewSource>
按下应设置数据源的按钮:
- (IBAction)graphPressed:(UIButton *)sender
{
GraphingViewController *graphingVC = [[GraphingViewController alloc] init];
graphingVC.graphingView.source = self;
[self.navigationController pushViewController:graphingVC animated:YES];
[graphingVC release];
}
按下按钮可以很好地显示新视图等,但是下面的代码行只返回null(在GraphingView.m中):
float result = [self.source getDataPoints:self];
看来,我无法访问我的数据源......
答案 0 :(得分:0)
在您的评论中,当您尝试设置其来源时,graphingView
似乎是nil
。
如果视图控制器有一个xib,你应该这样做:
GraphingViewController *graphingVC = [[GraphingViewController alloc] initWithNibName:@"GraphingViewController" bundle:nil];
而不是普通的init
。
这将创建并实例化所有视图对象,以便在呈现视图控制器之前可以设置属性。