Its*_*ret 2 objective-c uitableview nsoperation nsoperationqueue ios
所以我已经考虑了几天了,我似乎无法找到一个好的方法来使它工作.
我有一个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"];
Run Code Online (Sandbox Code Playgroud)
它工作但它也发送start
到NSOperation
队列中的下一个,它可以导致同时有2个NSOperation
,我只想要一个.
因此,如果我理解正确,未完成的操作列表是UITableView的数据源.
一种解决方案是过滤操作列表以删除已取消的操作.表视图的数据源将是此筛选列表,而不是原始操作列表.
归档时间: |
|
查看次数: |
4516 次 |
最近记录: |