2011-11-15 5 views
0

"MyCLController"클래스의 데이터 소스 대리인 인 "dataSource"속성을 가진 "MyCLController"클래스가 있습니다. "MyCLController"클래스는 위치 이벤트 등을 처리하며,이 클래스는 여러 sqlite DB 테이블을 쿼리하고 업데이트하기위한 여러 메소드가 필요합니다.사용자 정의 대리자 속성에서 클래스 메서드를 호출하는 방법은 무엇입니까?

@protocol MyCLControlerDataSourceDelegate <NSObject> 

@required 

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

@end 

을 그리고 여기에 데이터 소스 위임 속성 선언이다 : 그 이유로, 나는 데이터 소스 위임 클래스가 구현해야하는지 방법을 선언한다 "MyCLControlerDataSourceDelegate"프로토콜 만든 allocing 후

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

을/INITING 내 "MyCLController", MyCLControlerDataSourceDelegate 프로토콜을 구현하는 클래스 유형의 객체와 dataSource 속성을 연결합니다.

"MyCLController"를 느슨하게 결합하도록 설계하여 어떤 유형의 클래스 "dataSource"속성인지 알 필요가 없습니다. 인스턴스 메소드를 호출 할 때 모든 것이 훌륭합니다. 예를 들어

[self.dataSource someInstanceMethod]; 

호출 클래스 메소드는 어떻습니까? 나는 클래스 메소드가 [ClassName classMethod]라고 불려야 만하지만 "MyCLController"가 덜 독립적이라는 것을 알고있다.

+0

왜 클래스 메소드입니까? 위임자를 위해해야하는 인스턴스가 있다면 모든 대리자 메서드가 인스턴스 메서드 여야합니다. – jrturton

+0

왜냐하면, 필자는 필자의 작업 만 구현해야하고 프로젝트의 작업 규칙을 제동하지 않아야하는 프로젝트에 참여하고 있기 때문입니다. 모든 DB 클래스와 그 쿼리 메소드는 클래스 메소드이며,이 클래스는 싱글 톤 (DB 싱글 톤을 사용하는 것을 제외하고), 그냥 쿼리 DB입니다. 그리고 실제로 나는 그 클래스들을 할당/초기화 할 필요가 없습니다. 나는이 관점을 객관적인 관점에서가 아니라 사용자의 관점에서 바라보고있다. 단지 호기심이 다른 방법으로 할 수 있습니다. – Centurion

+0

코더로서, 나는 또한 objective-c와 iOS 사용자들로 식별 될 수 있으며, 그 관점에서 볼 때, 나는 그것이 나에게 편리하다고 느낀다. 하지만 가능하지 않다면 포기할 것입니다 :) – Centurion

답변

-1

해결 방법 중 하나는 객체에 대해 "클래스"메소드를 호출하는 것입니다. 객체의 클래스 이름을 가져온 다음 클래스 메소드라고 할 수 있습니다. 예 :

NSArray *allRegions = [[self.dataSource class] getAllRegions]; 
관련 문제