3

なぜコードがこれほど奇妙な振る舞いをするのかを理解する助けを求めています。私が持っているもの:BaseClass : NSManagedObjectそしてChildClass : BaseClass

BaseClass にはカテゴリがあります。.h:

@interface BaseClass (Category)

+ (NSArray)method;

@end

.m:

@implementation BaseClass (Category)

+ (NSArray *)method
{
    if ([self isKindOfClass:[ChildClass class]) {
        do stuff
        return resultArray;
    }
    return nil;
}

プロジェクトの別の場所から私は*array = [ChildClass method];. BaseClass (Category) 実装コンソールでは が読み取られますself = (Class)ChildClassが、実行フローは何らかの理由で をスキップしてif右に渡します。これは私の理解を超えています。return nil;それがなぜなのか、何か提案はありますか?すべての回答をお待ちしております。ありがとう。

... 十分な担当者ポイントがないため、スクリーンショットを投稿していません。私が明確だったことを願っています。

4

2 に答える 2

4

あなたは静的メソッドにいるので、 self はクラス自体を表します。これを行うには十分です:

if (self==[ChildClass class]) {
    do stuff
    return resultArray;
}
于 2013-02-13T22:24:03.987 に答える
1

[[childOrBaseInstance class] method];を呼び出しているコードで実行する方がよい場合があります+method

ChildClass独自のもの+methodをオーバーライドします。BaseClass+method

クラスをチェックして別のことをするときはいつでも、ポリモーフィズムを手動で再作成しているだけかどうかを自問してください。

于 2013-02-13T23:28:07.433 に答える