我有一个由视图控制器调用的类方法。我希望视图控制器知道类方法何时完成其任务(它上面有线程)
我想我应该使用委托,但我需要一个id delegate
,我不能通过self.delegate
来调用它,因为类方法中没有自我。
我该怎么做?
谢谢!
答案 0 :(得分: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];