使用NSObject确定挂起的操作

时间:2015-03-12 19:18:54

标签: ios objective-c nsobject

我正在显示一个包含按钮的UIView,为用户提供撤消操作的选项。视图保持可见几秒钟,然后关闭。我正在创建视图如下:

[self performSelector:@selector(endUndoOption) withObject:self afterDelay:delay];

然后在必要时使用以下内容取消它:

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(endUndoOption) object:self];

有没有办法确定是否安排了一项操作(在这种情况下,是endUndoOption)?或者如果计时器已经开始?目前我正在使用BOOL标志这样做但是想知道是否有办法检查是否有一个排队?谢谢!

1 个答案:

答案 0 :(得分:2)

如果你检查Cocoa Pods(http://cocoapods.org)BlocksKit pod http://zwaldowski.github.io/BlocksKit/,NSObject上有一个特殊的类别,有两个非常有用的方法:

+ (id)bk_performBlock:(void (^)(void))block afterDelay:(NSTimeInterval)delay;

返回一个取消句柄的id。

+ (void)bk_cancelBlock:(id)handle;

取消预定的演出。

因此,要实现目标,可以将取消句柄存储在某些属性中,例如

self.endUndoCancellationHandle = [[self class] bk_performBlock:^{ 
                                              [self endUndoOption];
                                              self.endUndoCancellationHandle = nil;
                                          } afterDelay:delay]; 

然后取消:

if (self.endUndoCancellationHandle)
{
     [[self class] bk_cancelBlock:self.endUndoCancellationHandle];
     self.endUndoCancellationHandle = nil;
}

要检查是否安排了某些内容,只需检查您当前是否有句柄:

if (self.endUndoCancellationHandle)
{
...
}