2012-04-06 23 views
1

我一直在用一個很酷的圖表框架(http://www.shinobicontrols.com/shinobicharts/)進行一些測試,到目前爲止我讓他們在我的項目上工作。他們看起來很棒!正如我在任何測試中所做的那樣,我儘可能簡單地實現了這些示例,然後,在工作時,我將繼續在代碼組織部門中改進一些內容。重構代碼後使用self.view

當我對自己所擁有的東西感到滿意後,我開始重構代碼。現在我無法通過圖表來了解我的觀點。我已經測試了NSLog方法的調用,並且按預期調用了一切。這是處理讓我在這裏轉動的觀點。讓我解釋一下我的工作(什麼時候工作)以及我做了什麼(打破它)。

工作情形:

  • ReportsViewController 1)進口chartLibrary.h 2)進口chartDatasource.h 3)創建的視圖,並用[self.view addSubview:chart];

所有添加的在同一個地方。都好。

我做了什麼來組織我的代碼:

1)創建一個新的類「ChartReports」(起初我以爲這應該是NSObject的但那麼我改的UIViewController,我不能和意見工作) 2 )將所有導入和繪圖代碼移到這個新類中。爲每種類型的圖表創建繪圖方法。 3)將「ChartReports」導入到「ReportsViewController」 4)創建新對象(ChartReports類型),並在與之前的整個代碼完全相同的位置調用「drawChartX」的新方法(在「ReportsViewController」內部)

這一切都南下:(

的事情是,呼叫是正確的,方法「drawChartX」之稱,我的NSLog從開始到結束,以確保代碼執行,但沒有什麼是畫在屏幕

我創建它並將其命名爲:

ChartReports *chart = [[ChartReports alloc] init]; 

[chart drawChartX]; 

當我看到我移動的代碼(從「ReportsViewController」到「ChartReports」)時,我注意到它仍然在每個地方都顯示「self.view」。我認爲這是繪畫突破的地方。 「自我」最初稱爲「ReportsViewController」,現在它意味着「ChartReports」。

所以,在所有這些之後:我如何告訴「ChartReports」使用「ReportsViewController」.view而不是它自己的視圖?

我試過變量和屬性沒有運氣。我是否應該將視圖的名稱作爲方法參數發送?

我很抱歉張貼這麼長的解釋,但我沒有想法嘗試。任何一般提示都將有助於回到正確的道路上。

感謝像往常一樣,

回答

1

你ChartReports對象不應該在你的ReportsViewController繪製,這樣會破壞基本的MVC原則。相反,您應該組織您的代碼,以便ChartReports對象創建並返回一個視圖(即圖表),那麼您的ReportsViewController將使用addSubview添加到其視圖。

通過這種方式,您仍然可以將圖表的創建封裝在單獨的對象(ChartReports)中,但是您將離開將圖表顯示到視圖控制器的工作,這是它的工作。

+0

嗨@jonkroll。我明白你的意思。我會盡力去實現它(我是這個新手),但是我還有一個來自你對MVC敏銳觀察的問題。這裏的「繪圖」只是指「addSubview」部分,還是像initWithFrame,autoresizingMask和標籤分配一樣包含在內?我會說不,但如果你能確認我將把所有這些留在ChartsReport對象上。 – 2012-04-07 11:44:37

+0

我想說ChartsReport可以處理創建和配置圖表視圖的所有方面,其中包括您提到的所有內容:init,autoresizingMask,賦值屬性值等。這樣您的視圖控制器將不需要知道設置視圖的任何細節,並且ChartsReport對象不需要知道視圖在設置後如何使用。 – jonkroll 2012-04-07 15:11:37