0

そこで、いくつかのコードを既存の DataManager コードにリファクタリングしたいと思います。コード ベースが大きすぎるため、Data Access Object パターンを使用して別のファイルに分割したいと考えています。だから私がやりたいのは

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 に答える