2012-10-26 5 views
0

기존의 DataManager 코드에 대한 코드를 리팩토링하고 싶습니다. 코드베이스가 너무 커서 데이터 액세스 개체 패턴을 사용하여 별도의 파일로 분할하려고합니다. 그래서 내가하고 싶은 것은하위 클래스의 카테고리 선언

BaseDAO 

입니다. 그런 다음 개별 DAO가 해당 클래스로부터 상속 받도록하십시오. 그래서 나는

SomeItemDAO.m에서

BaseDAO : NSObject 

SomeItemDAO : BaseDAO 

을 가지고, 나는

@implementation SomeItemDAO (DataManager) 

는이하지만 경고를 얻을 종류는 또한 주요 클래스 implmeented 될 방법을 구현한다 " 동일한 메소드 이름이 아니더라도 읽을 수 있습니다.

@interface NSArray (MyCAtegory) 

그 컴파일러 경고를 얻지 못할 것입니다.

그런 경우 어떻게해야합니까? 할 수 없다

@interface BaseDAO (DataManager) 

컴파일러는 BaseDAO 인터페이스를 찾을 수 없다고 말합니다. 이견있는 사람? 감사.

편집 :

+ (SomeItemDAO *)sharedInstance { 
    static SomeItemDAO *instance; 
    static dispatch_once_t onceToken; 

    dispatch_once(&onceToken, ^{ 
     instance = [[SomeItemDAO alloc] init]; 
    }); 
    return instance; 
} 

- (void)someTestMethod { 
    NSLog(@"test method from condition"); 
} 
+0

컴파일러가 카테고리를 구현할 것이라고 알려주는 방법은 무엇입니까? –

+0

@rob mayoff 나는 내 글을 편집했다. 컴파일러가 불평하는 두 가지 방법 모두. sharedInstance 및 someTestMethod는 DataManager에 정의되어 있지 않습니다. – Crystal

+0

@interface SomeItemDAO (DataManager) 및 BaseDAO.m 구현을 게시 할 수 있습니까? – iDev

답변

1

다음 중 하나를 당신의 구현, 쓰기가 다음 SomeItemDAO.h 파일

에서

@interface SomeItemDAO (DataManager),

@interface SomeItemDAO (DataManager) 

+ (SomeItemDAO *)sharedInstance; 
- (void)someTestMethod; 

@end 

이러한 제거 SomeItemDAO에서 메소드 선언,

@interface SomeItemDAO : BaseDAO 
//remove sharedInstance and someTestMethod from here 
@end 

또는 :@implementation SomeItemDAO (DataManager)

@implementation SomeItemDAO (DataManager) 
//remove sharedInstance and someTestMethod from here 
@end 

에서 제거하고 여기에 추가,

@implementation SomeItemDAO 

+ (SomeItemDAO *)sharedInstance { 
    static SomeItemDAO *instance; 
    static dispatch_once_t onceToken; 

    dispatch_once(&onceToken, ^{ 
     instance = [[SomeItemDAO alloc] init]; 
    }); 
    return instance; 
} 

- (void)someTestMethod { 
    NSLog(@"test method from condition"); 
} 

@end 

당신의 경고 메시지가 "종류가 있다고 때문에 그것의 pr에 의해 또한 실행될 방법을 실행하십시오 imake class " 귀하의 카테고리 SomeItemDAO (DataManager)은 기본 클래스 SomeItemDAO에서 이미 선언 된 메소드를 구현하려고합니다. 따라서 기본 클래스의 @interface에서이 클래스를 제거하고이 카테고리의 @intefrace.에 추가해야합니다.이 메서드를 @implementation SomeItemDAO에 넣으려면이 메서드를 @implementation SomeItemDAO (DataManager)에서 옮기고 그대로 두십시오.

관련 문제