gpt4 book ai didi

iphone - 在子类上声明类别

转载 作者:行者123 更新时间:2023-11-29 04:20:02 25 4
gpt4 key购买 nike

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

BaseDAO

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

BaseDAO : NSObject

SomeItemDAO : BaseDAO

SomeItemDAO.m,我有

@implementation SomeItemDAO (DataManager)

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

@interface NSArray (MyCAtegory)

您不会收到编译器警告。

如果是这样的话,根据我的情况我该如何做?我做不到

@interface BaseDAO (DataManager)

编译器表示找不到接口(interface) 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");
}

最佳答案

要么:实现您的,

@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 中, code>,从 @implementation SomeItemDAO (DataManager) 中移动这些方法并将其保留在那里。

关于iphone - 在子类上声明类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13092007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com