2010-12-08 11 views
0

私は自分のゲームビューを実行しているviewControllerを持っています。 viewControllerは、サブビューとしてviewControllerビューに追加されたUIViewからサブクラス化されたDotsのインスタンスを生成します。ドットクラス内では、私はそれらが触れられている(touchesBegan)特定の動作を持っていますが、私はまた、viewControllerのプロパティであるスコアに追加する点に触れたいと思いますが、ばかばかしい回避策。私はここで何が欠けていますか?どのように何かが起こったことをクラスにView Controllerと通信させるには

答えて

0

NSNotificationCenterとデリゲート+プロトコルの2つのオプション(唯一のものではありません)があります。

NSNotificationCenterは実装して使用するのが簡単ですが、すべてのケースで理想的ではありません。 viewControllerはaddObserverを呼び出して、何らかのメッセージに関心があることを示します。点は興味のあるオブジェクトにメッセージを送るためにpostNotificationNameを呼び出すでしょう。 viewControllerのdeallocでremoveObserverを呼び出すようにしてください。

delegate +プロトコルを使用すると、オブジェクト間のより厳密で、明確な、コンパイラまたは実行時検証可能なインターフェイスを定義できます。詳細は、Objective-Cプログラミング言語のProtocolsを参照してください。

あなたの場合、私はプロトコルの定義がより良い選択肢だと考えています。 viewController自体がドットオブジェクトのデリゲートになります。ドットオブジェクトにはデリゲートプロパティがあり、デリゲートプロパティでプロトコルメソッドを呼び出します。

0

スコアは、最初はViewControllerのプロパティですか?私はスコアを表示するラベルのプロパティを持つことができますが、スコアそのものは何らかの種類のモデルオブジェクトに属しています。

このアプローチの利点は、Key-Value Observing(KVO)を使用して、ViewControllerをモデルオブジェクトのオブザーバとして追加できることです。実際、これはKVOが設計したものとほとんど同じです。プロパティの変更について任意の数のオブザーバに通知する簡単な方法です。

参考:
Key-Value Coding Protocol Reference
Key-Value Observing Protocol Reference
Model Object Implementation Guide

関連する問題