2011-11-15 55 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];