ビューコントローラーによって呼び出されるクラスメソッドがあります。クラスメソッドがいつタスクを終了したか(スレッドがある)をView Controllerに認識させたいと思います。
委任を使用する必要があると思いますが、クラス メソッドに self がないため 、 が必要であり、id delegate
で呼び出すことができません。self.delegate
どうすればいいですか?
ありがとう!
ビューコントローラーによって呼び出されるクラスメソッドがあります。クラスメソッドがいつタスクを終了したか(スレッドがある)をView Controllerに認識させたいと思います。
委任を使用する必要があると思いますが、クラス メソッドに self がないため 、 が必要であり、id delegate
で呼び出すことができません。self.delegate
どうすればいいですか?
ありがとう!
デリゲートをクラス レベルで (オブジェクト レベルのデリゲートとは別に) 格納することもできますが、私には少し怪しいように思えます。方法は次のとおりです。
ヘッダー ファイルで:
@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];