2011-11-15 108 views
0

我有一個類「MyCLController」,其屬性爲「dataSource」,它是「MyCLController」類的數據源代理。 「MyCLController」類處理位置事件等,這個類需要幾種方法來查詢和更新幾個sqlite數據庫表。出於這個原因,我已創建「MyCLControlerDataSourceDelegate」協議,聲明,數據源委託類應該實現什麼樣的方法:如何在自定義委託屬性上調用類方法?

@protocol MyCLControlerDataSourceDelegate <NSObject> 

@required 

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

@end 

而這裏的數據源委託財產申報:

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

allocing後/ INITING我「MyCLController」,我將它的dataSource屬性與一個實現MyCLControlerDataSourceDelegate協議的類型的對象連接起來。

我想設計「MyCLController」是鬆散耦合的,所以它不必知道什麼類的「dataSource」屬性是。當調用實例方法時,一切都很好,例如:

[self.dataSource someInstanceMethod]; 

但是如何調用類方法?我知道類方法應該被稱爲[ClassName classMethod],但是這會使「MyCLController」不那麼獨立。

+0

他們爲什麼是類方法?如果您有一個實例,您必須爲委託做一個實例,那麼似乎所有的委託方法都應該是實例方法。 – jrturton

+0

因爲,我正在開展一個項目,我只需要執行我的任務,而不是制止項目的工作約定。所有數據庫類及其查詢方法都是類方法,這些類不是單例(除了使用數據庫單例),它們只是查詢數據庫。實際上,我不需要分配/初始化任何這些類。我從用戶的角度來看這個需求,而不是從角度的objective-c及其限制。只是好奇是否有可能以其他方式做。 – Centurion

+0

作爲一名編碼人員,我也可能被認定爲使用objective-c和iOS的用戶,並從這個角度來看,我覺得這對我來說很方便。但如果這是不可能的,我會放棄:) – Centurion

回答

-1

其中一個解決方案是在對象上調用「class」方法。它會得到一個對象的類名稱,然後我們可以稱之爲類方法,例如:

NSArray *allRegions = [[self.dataSource class] getAllRegions];