2012-10-26 50 views
0

所以我想重構一些代碼到我們現有的DataManager代碼。代碼庫太大,我們想用數據訪問對象模式將它分割成單獨的文件。所以我想要做的是有一個在子類上聲明一個類別

BaseDAO 

然後有個別DAO從該類繼承。所以,我有

BaseDAO : NSObject 

SomeItemDAO : BaseDAO 

SomeItemDAO.m,我有

@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我編輯了我的帖子。編譯器正在抱怨這兩種方法。 DataManager中未定義sharedInstance和someTestMethod。 – 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 

因爲你的警告消息說,「類別是實施也將由其公關執行的方法Imary類「您的類別SomeItemDAO (DataManager)正試圖實施已在其主要類SomeItemDAO中聲明的方法。所以你應該將它從主類@interface中刪除,並將其添加到此類別的@intefrace.如果您希望這些方法在@implementation SomeItemDAO中,請將這些方法從@implementation SomeItemDAO (DataManager)中移出並保留在那裏。

相關問題