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.Iは理解していたでしょうNSInteger dataCount = [APLStockViewController graphViewDailyTradeInfoCount:self];:

問題は次のとおりです。コードの 1 行目を読むと、dataSource にメッセージ graphViewDailyTradeInfoCount が送信されています (これは、発生したトランザクションの数を示す数値を返します)。25 トランザクションを想定すると、基本的に [dataSource 25]; どこかに、送信されている 25 をどう処理するかを dataSource に指示するコードがあることを強く期待しているためです。でも無い!!!

次に、途方もないことが桁違いに増加します。dataSource に 25 が送信されると、それが返されて dataCount に入れられます。それを行うことをどのように知っているのですか、それを見つけることができるコードはどこにもありません。

コードの 2 行目で、dataSource は NSArray を受け入れる (そして返す) ことを知っています。

めったにない正気の瞬間に、 dataSource は、渡されたものを「パススルー」する以外に何もしないように見えます。コンピューターは魔法を使うことはできません。それは機能のように感じますが、どこに文書化されていますか?

ありがとう!

4

2 に答える 2

0

デリゲートとデータソースの仕組みを複雑にしすぎているのではないかと思います。データソースは、あるオブジェクトのインスタンスを指しています。

あるオブジェクトが であると言ったとき、それはやAPLSimpleStockViewDataSourceを含むいくつかのメソッドを実装したと言っていました。そのオブジェクトは(またはあなたが作業しているクラスの名前が何であれ)、またはのように、その作成のどこかにありますgraphViewDailyTradeInfoCount:graphViewSortedMonths:SomeInstanceOfAPLSimpleStockView.datasource = selfinitviewdidload

MyObject* myobjこれらのメソッドを実装したものがいくつかあり、呼び出したのと同じです。 [myobj graphViewSortedMonths:self

于 2013-05-24T17:42:54.490 に答える