2011-11-15 7 views
0

"MyCLController"クラスのデータソースデリゲートであるプロパティ "dataSource"を持つクラス "MyCLController"があります。 "MyCLController"クラスは位置イベントなどを扱います。このクラスはいくつかのsqlite DBテーブルのクエリと更新のためのいくつかのメソッドを必要とします。そのため、私は、データソースの委譲クラスが実装するべきメソッド宣言「MyCLControlerDataSourceDelegate」プロトコルを作成している:私をINITING/allocing後カスタムデリゲートプロパティのクラスメソッドを呼び出す方法は?

@property (nonatomic, assign) id <MyCLControlerDataSourceDelegate> dataSource; 

@protocol MyCLControlerDataSourceDelegate <NSObject> 

@required 

+ (NSArray *)getAllRegions; 
+ (void)saveVisitTimeForRegionID:(NSInteger); 
-(void)someInstanceMethod; 

@end 

そしてここでは、データソースデリゲートプロパティ宣言です"MyCLController"、私は自分のdataSourceプロパティをMyCLControlerDataSourceDelegateプロトコルを実装するタイプのクラスのオブジェクトにリンクしています。

"MyCLController"を疎結合に設計して、どのタイプのクラス "dataSource"プロパティであるかを知る必要はありません。例えば、インスタンスメソッドを呼び出すときは、すべてがいいです。

[self.dataSource someInstanceMethod]; 

しかし、クラスメソッドを呼び出す方法はありますか?クラスメソッドを[ClassName classMethod]と呼びますが、それは "MyCLController"の独立性が低くなることを知っています。

+0

なぜクラスメソッドですか?デリゲートのために行う必要があるインスタンスがある場合は、すべてのデリゲートメソッドがインスタンスメソッドである必要があります。 – jrturton

+0

私は自分の仕事だけを実装しなければならないプロジェクトに取り組んでおり、プロジェクトの作業慣習を制動しないためです。すべてのDBクラスとそのクエリメソッドはクラスメソッドであり、それらのクラスは単なるクエリDBではなく、シングルトン(DBシングルトンを使用する場合を除く)ではありません。そして、実際に私はそれらのクラスのどれかを割り当て/初期化する必要はありません。私はこの目的を、客観的視点とその制約からではなく、ユーザーの視点から見ています。ちょうど好奇心が別の方法で行うことが可能です。 – Centurion

+0

コーダーとしては、私は、ユーザーの目的がcとiOSであるユーザーとして識別され、その観点から見ると、私にとっては便利だと感じています。しかし、それが可能でないなら私はあきらめます:) – Centurion

答えて

-1

解決策の1つは、オブジェクトに対して「クラス」メソッドを呼び出すことです。オブジェクトのクラス名を取得し、それをクラスメソッドと呼びます。たとえば、次のようになります。

NSArray *allRegions = [[self.dataSource class] getAllRegions]; 
関連する問題