1

在 Apple 提供的SimpleStocks示例代码中,dataSource 定义如下:

property (nonatomic, weak) IBOutlet id <APLSimpleStockViewDataSource> dataSource;

然后按如下方式进行各种使用(只有2个示例,但代码中还有更多示例)

NSInteger dataCount = [self.dataSource graphViewDailyTradeInfoCount:self]; 
NSArray *sortedMonths = [self.dataSource graphViewSortedMonths:self];

我理解 graphViewDailyTradeInfoCount 的作用,以及 graphViewSortedMonths。我会理解的:(NSInteger dataCount = [APLStockViewController graphViewDailyTradeInfoCount:self];试过了,我想我知道为什么那行不通)

这是问题所在:我阅读第一行代码的方式是,正在向 dataSource 发送消息 graphViewDailyTradeInfoCount (它返回一些数值,指定发生了多少事务)。如果我们假设 25 个事务,本质上是 [dataSource 25];现在我的想法令人难以置信,因为我强烈期望在某个地方,会有代码告诉 dataSource 如何处理它正在发送的 25。但是没有!!!

然后令人难以置信的增加了一个数量级:dataSource 已经发送了 25,它现在返回并将其放入 dataCount。它怎么知道这样做,我也找不到任何代码。

现在,让我发痒,在第二行代码中,dataSource 知道接受(然后返回)一个 NSArray。

在我越来越少见的理智时刻,在我看来,dataSource 除了“通过”它得到的东西之外真的没有做任何事情。电脑不能变魔术,感觉像是一个功能,但它在哪里记录?

谢谢!

4

2 回答 2

1

这是问题所在:我阅读第一行代码的方式是,正在向 dataSource 发送消息 graphViewDailyTradeInfoCount (它返回一些数值,指定发生了多少事务)。

正确的。

如果我们假设 25 个事务,本质上是 [dataSource 25];

不正确(根据 [] 和您的描述,您认为我们将 25 发送到数据源)。通话后,dataCount = 25

该调用要求数据源将数据返回给我们。它将我们自己传递给数据源 ( :self) 以获取信息,但请求的目的是从数据源获取信息。

现在我们有了 25(存储在 中dataCount),我们可以用它做点什么。

同样,在第二行代码中,数据源只是返回数组。我们没有传递给它一个数组。

对于上一个小问题:

NSInteger dataCount = [APLStockViewController graphViewDailyTradeInfoCount:self];

这是行不通的,因为APLStockViewController是一门课。我们需要与类的一个实例(这是self.dataSource进来的地方)交谈。

于 2013-05-24T17:34:38.307 回答
0

我认为您可能过于复杂了委托和数据源的工作方式。数据源指向某个对象的某个实例。

当某个对象说它是 aAPLSimpleStockViewDataSource时,它是说它实现了一些方法,包括graphViewDailyTradeInfoCount:and graphViewSortedMonths:。该对象SomeInstanceOfAPLSimpleStockView.datasource = self在其创建中的某个位置具有(或您正在使用的类的名称),例如initviewdidload

就像你有一些 MyObject* myobj实现了这些方法一样,你调用了[myobj graphViewSortedMonths:self

于 2013-05-24T17:42:54.490 回答