1

我一直在用一个很酷的图表框架 (http://www.shinobicontrols.com/shinobicharts/) 进行一些测试,到目前为止,我让他们在我的项目上工作。他们看起来很棒!

就像我在任何测试中所做的那样,我尽可能简单地实现示例,然后,当它工作时,我继续在代码组织部门进行一些改进。

在我对所拥有的东西感到满意后,我开始稍微重构代码。现在我无法在我的视图上绘制图表。我已经使用 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”。我认为这就是绘画被破坏的地方。“self”最初指的是“ReportsViewController”,现在它的意思是“ChartReports”。

那么,毕竟:我如何告诉“ChartReports”在“ReportsViewController”.view 上绘制而不是在它自己的视图上绘制?

我尝试了变量和属性,但没有成功。我应该将视图的名称作为方法参数发送吗?

很抱歉发布这么长的解释,但我没有想法尝试。任何一般性提示都会有助于重回正确的道路。

像往常一样感谢,

4

1 回答 1

1

你的 ChartReports 对象不应该在你的 ReportsViewController 上绘制,这会破坏基本的 MVC 原则。相反,您应该组织您的代码,以便 ChartReports 对象创建并返回一个视图(即图表),然后您的 ReportsViewController 将使用addSubview.

通过这种方式,您仍然可以将图表的创建封装在单独的对象 (ChartReports) 中,但是您将显示图表的工作留给视图控制器,这是它的工作。

于 2012-04-06T18:06:53.893 回答