所以这几天我一直在思考这个问题,我似乎找不到一个好的方法来让它工作。
我有一个一次NSOperationQueue
只允许一个操作。我从文档中了解到:
在 OS X v10.6 及更高版本中,取消操作会导致操作忽略它可能具有的任何依赖项。这种行为使队列可以尽快执行操作的 start 方法。反过来, start 方法将操作移动到完成状态,以便可以将其从队列中删除。
当我发送取消它会设置isCancelled
为YES,但我的问题是:
假设我有 20 个NSOperation
在队列中,我刚刚取消了第 18 个,它会一直停留在NSOperationQueue
它可以运行并说它已经完成(我的NSOperation
检查正确isCancelled
)但是因为它停留在队列中,它也停留在UITableView
我设置dataSource
的位置喜欢myOperationQueue.operations
。
这就是困扰我的地方,用户将单击Cancel
哪个将调用该cancel
方法,NSOperation
但该操作仍将显示,因为它仍在队列中。
我想过start
在cancel
方法中调用,但不允许只有队列可以start
。
编辑:我也试图isFinished
覆盖cancel
:
[self willChangeValueForKey:@"isFinished"];
_isFinished = YES;
[self didChangeValueForKey:@"isFinished"];
它可以工作,但它也会发送start
到队列中的下一个NSOperation
,它可能导致同时拥有 2 个NSOperation
,而我只想要一个。