2011-09-13 56 views
0

我使用MVC模型,但我不能得到所需的數據來看,我試圖用一個數據源,因爲視圖不應該擁有自己的數據。通常,協議用於創建數據源。的Objective-C,使用協議來訪問數據源

  • 我有一個MVC:。CalculatorBrain [HM] - CalculatorViewController [HM] - (視圖的.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]; 

看來,我無法訪問我的數據源...

+0

使用調試,你調用'[self.source getDataPoints:self]'時看到了什麼?它是否進入你的'CalculatorViewController',或者是'source' nil? – jrturton

+0

我確實沒有進入CalculatorViewcontroller,源代碼是0x0 ... – mmvie

+0

然後'graphingVC.graphingView'可能在您設置'source'時是'nil'。有沒有這個xib或者你在代碼中創建視圖? – jrturton

回答

0

根據您的意見,graphingView似乎是nil在您嘗試設置其來源時。

如果沒有爲視圖控制器廈門國際銀行,你應該這樣做:

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

而不是一個普通的init

這將創建並實例化所有視圖對象,以便在呈現視圖控制器之前設置屬性。

+0

graphingView試圖設置它的源時仍然是空的。 – mmvie

+0

然後,您可能無法在界面構建器中正確連接其插座。 – jrturton

+0

我可以在viewDidLoad中設置源代碼:在GraphingViewCalculator中,但我需要CalculatorViewController的非常相同的對象,創建一個新的不會工作... 編輯:注意到您的評論太晚,現在檢查IB – mmvie