所以我几天都在考虑这个问题,而且我似乎找不到一个好办法让它发挥作用。
我有一个NSOperationQueue
,一次只允许一个操作。
我从文档中了解到:
在OS X v10.6及更高版本中,取消操作会导致操作忽略它可能具有的任何依赖性。此行为使队列可以尽快执行操作的start方法。反过来,start方法将操作移动到完成状态,以便可以从队列中删除它。
当我发送取消时,它会将isCancelled
设置为YES,但我的问题是:
说我队列中有20个NSOperation
,我刚刚取消了第18个,它会留在NSOperationQueue
直到它可以运行并说它已经完成(我的{{ 1}}正确检查NSOperation
)但是当它保留在队列中时,它也会保留在isCancelled
中,我将UITableView
设置为dataSource
。
令我困扰的是,用户会点击myOperationQueue.operations
,Cancel
会调用cancel
上的NSOperation
方法,但操作仍会显示为“{1}}。仍然在队列中。
我考虑过在start
方法中调用cancel
,但不允许只有队列可以start
。
编辑:我还试图覆盖isFinished
:
cancel
[self willChangeValueForKey:@"isFinished"];
_isFinished = YES;
[self didChangeValueForKey:@"isFinished"];
虽然有效,但它也会将start
发送到队列中的下一个NSOperation
,并且可能会导致同时拥有2个NSOperation
而我只需要一个{{1}}。
答案 0 :(得分:5)
因此,如果我理解正确,未完成的操作列表就是UITableView的数据源。
一种解决方案是过滤操作列表以删除已取消的操作。表视图的数据源将是此筛选列表,而不是原始操作列表。