3

ビューコントローラーによって呼び出されるクラスメソッドがあります。クラスメソッドがいつタスクを終了したか(スレッドがある)をView Controllerに認識させたいと思います。
委任を使用する必要があると思いますが、クラス メソッドに self がないため 、 が必要であり、id delegateで呼び出すことができません。self.delegate

どうすればいいですか?
ありがとう!

4

1 に答える 1

3

デリゲートをクラス レベルで (オブジェクト レベルのデリゲートとは別に) 格納することもできますが、私には少し怪しいように思えます。方法は次のとおりです。

ヘッダー ファイルで:

@interface SomeClass : SomeBaseClass
{
...
}

...
+ (id<SomeDelegateProtocol>)classDelegate
+ (void)setClassDelegate(id<SomeDelegateProtocol>) delegate
+ (void)myCleanupClassMethod

@end

実装ファイルで:

@implementation SomeClass
...

static id<SomeDelegateProtocol> _classDelegate = nil;

+ (id<SomeDelegateProtocol>)classDelegate
{
    return _classDelegate;
}

+ (void)setClassDelegate(id<SomeDelegateProtocol> delegate
{
    _classDelegate = delegate;
}

+ (void)myCleanupClassMethod
{
    if ([_classDelegate respondsToSelector:@selector(theDelegateMethod:)])
    {
        [_classDelegate theDelegateMethod:something];
    }
}

@end

このコードを実際に使用するには、オブジェクト レベルのデリゲートのようにクラス レベルのデリゲートを設定し、それが呼び出されるのを待ちます (いつmyCleanupClassMethod呼び出されるかを決定する必要があります)。

// Somewhere else in the project
[SomeClass setClassDelegate:self];
于 2012-05-12T09:36:25.030 に答える