我有一个类对象,我在不同的地方使用了很多。
现在我正在使用这样的课程:
myClass.delegate = self;
[myClass doSomething];
doSomething会创建一个新的类对象来计算内容,并且可能需要最多1分钟才能将结果发回给委托,如下所示:
-(void)doSomething {
CalculateStuff *calc = [[calculateStuff alloc] init];
calc.delegate = self;
[calc calculate];
}
/* Calculate Delegate */
-(void)didCalculate {
[[self delegate] didDoSomething];
}
问题是我从另一个地方调用同样的东西,它将调用我的最新代表,这会导致很多问题。
问题:
有没有办法将委托作为对象发送而不必将其设置为属性? 我这样写了,Xcode给了我警告“MyClass的不完整实现”
[myClass doSomethingWithDelegate:self];
和
-(void)doSomethingWithDelegate:(id)delegate {
CalculateStuff *calc = [[calculateStuff alloc] init];
[calc calculateWithDelegate:delegate];
}
/* Calculate Delegate */
-(void)didCalculateWithDelegate:(id)delegate {
[delegate didDoSomething];
}
修改 刚试了一下它似乎工作,但我怎么能摆脱Xcode中的警告?
答案 0 :(得分:1)
我认为您的问题是您忘记从类的接口(或类扩展)中删除doSomething
和didCalculate
的声明。
理想情况下,您应该创建一个协议以确保您的委托具有所需的方法。例如:
@protocol DoSomethingDelegate <NSObject>
- (void)didDoSomething;
@end
然后使用id<DoSomethingDelegate>
而不只是id
。
传递一个块也是解决这个问题的有效方法,虽然它有点棘手。