我有以下方法:等待值改变,然后执行块
-(void) waitForStatusChangeAndPerformBlock:(MyBlockType)successBlock;
这是方法应该做的:
- 检查是否存在
status
具有正确的值 - 如果它调用块
successBlock
- 如果不等待
status
更改为给定值,然后调用块ķsuccessBlock
我考虑KVO,以检查是否该值已更改,但然后我将不得不块存储在一些实例变量,或更糟的是,数组,我会失去当前方法的上下文中呼叫。所以,我真的希望是这样的:
-(void) waitForStatusChangeAndPerformBlock:(MyBlockType)successBlock{
if(self.status == kDesiredStatus){
successBlock;
} else {
[TheMagicDispatchWaitUntil:(self.status == kDesiredStatus) andThenDoThis:^{
successBlock;
}];
}
}
有没有办法实现这个无志愿或其他辅助方法?
我想你应该检查这个问题 http://stackoverflow.com/questions/6704072/how-do-i-use-nsconditionlock-or-nscondition – 2012-08-11 10:14:39
这是一个可怕的想法。你会完全阻止你的用户界面。你真的需要找到另一种方法,你可以显然冻结,但不是真的。例如,用透明视图覆盖当前视图而不是阻止用户交互,或者设置您在各个地方测试的伊维尔标志。希望你给用户一个实时控制取消或返回。 – 2012-08-11 12:30:11
@DavidH我不打算阻止用户界面,等待和调用块应该在后台。所以我可以做一些类似'waitForStatusChangeAndPerformBlock:{[self beep]}'所以这意味着一旦状态改变就会发出嘟嘟声,但用户仍然可以在此期间使用UI。 – Besi 2012-08-12 07:49:34