Objective-C,使用协议访问数据源

时间:2011-09-13 10:22:42

标签: objective-c protocols datasource

我正在使用MVC模型,但我无法获取View所需的数据,我正在尝试使用数据源,因为View应该永远不会拥有其数据。通常,协议用于创建数据源。

  • 我有一个MVC:CalculatorBrain。[hm] - CalculatorViewController。[hm] - (view is .xib)
  • 我也有MVC:GraphingView - GraphingViewController - (模型是我无法获得的数据)

目标是:当我按下计算器上的按钮时,它会绘制当前显示在其中的功能(例如: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];

看来,我无法访问我的数据源......

1 个答案:

答案 0 :(得分:0)

在您的评论中,当您尝试设置其来源时,graphingView似乎是nil

如果视图控制器有一个xib,你应该这样做:

GraphingViewController *graphingVC = [[GraphingViewController alloc] initWithNibName:@"GraphingViewController" bundle:nil];

而不是普通的init

这将创建并实例化所有视图对象,以便在呈现视图控制器之前可以设置属性。