![](/img/trans.png)
[英]Crashing with ASIHTTPRequest and NSOperationQueue when cancelling operations
[英]iOS - How to know when NSOperationQueue finish processing a few operations?
我需要在我的应用程序中下载目录及其内容。 所以我决定实现一个NSOperationQueue,我将NSOperation子类化为实现NSURLRequest等...
问题是我一次添加所有操作,我无法弄清楚何时下载一个目录的所有文件以更新UI并启用此特定目录。
现在我必须等待所有目录中的所有文件都被下载才能更新UI。
我已经为NSOperationQueue的operationCount和NSOperation的isFinished实现了键值观察,但我不知道目录何时包含所有文件!
你有什么主意吗 ?
非常感谢
添加“完成” NSOperation
,其中包含一个目录的所有其他NSOperations
作为依赖项。
像这样的东西:
NSInvocationOperation *doneOp = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(done:) object:nil];
NSInvocationOperation *op1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(doSomething:) object:nil];
[queue addOperation:op1];
[doneOp addDependency:op1];
NSInvocationOperation *op2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(doSomething:) object:nil];
[queue addOperation:op2];
[doneOp addDependency:op2];
NSInvocationOperation *op3 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(doSomething:) object:nil];
[queue addOperation:op3];
[doneOp addDependency:op3];
[queue addOperation:doneOp];
doneOp
只会在op1
, op2
和op3
完成执行后运行。
[opQueue operationCount]
希望这可以帮助
您可以重构代码以避免一次将所有请求排入队列。 一次仅排队一个目录的请求。 当operationCount
达到零时,您可以确保所有请求都已完成或失败,更新UI并将请求排入下一个目录。 继续,直到目录数组为空。
优点是:
一种方法是创建某种Directory类,其属性如loadedCount(最初为0)和fileCount(初始化为目录中的多个文件),并创建一个字典,将每个NSOperation映射到相应的目录,然后再将操作添加到队列。 在isFinished的回调中,您可以将给定NSOperation的Directory对象从字典中拉出并将directory.loadedCount递增1.如果您的directory.loadedCount == directory.fileCount,则触发对UI的更新。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.