0

所以我想将一些代码重构为我们现有的 DataManager 代码。代码库太大,我们想使用数据访问对象模式将其拆分为单独的文件。所以我想做的是有一个

BaseDAO

然后让各个 DAO 从该类继承。所以我有

BaseDAO : NSObject

SomeItemDAO : BaseDAO

在里面

SomeItemDAO.m,我有

@implementation SomeItemDAO (DataManager)

但我收到警告,“类别正在实现一个方法,该方法也将由其主类实现,即使它的方法名称不同。我读到,如果你有类似的东西

@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");
}
4

1 回答 1

1

要么:实施你的,

@interface SomeItemDAO (DataManager)SomeItemDAO.h文件中和

在那里写下以下内容,

@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

因为您的警告消息说“类别正在实现一个方法,该方法也将由其主类实现”您的类别SomeItemDAO (DataManager)正试图实现一个已经在其主类中声明的方法SomeItemDAO。因此,您应该将其从主类中删除并将其@interface添加到该类别中。@intefrace.@implementation SomeItemDAO@implementation SomeItemDAO (DataManager)

于 2012-10-27T00:11:34.880 回答