Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iOS - How to know when NSOperationQueue finish processing a few operations?

I need in my application to download directories and their content. So I decided to implement a NSOperationQueue and I subclassed NSOperation to implement NSURLRequest etc...

The problem is I add all the operations at once and I can't figure out when all the files for one directory are downloaded in order to update the UI and enable this specific directory.

Now I have to wait that all the files from all the directories are downloaded in order to update the UI.

I already implemented key-value observing for the operationCount of the NSOperationQueue and the isFinished of the NSOperation but I don't know when a directory has all the files in it !

Do you have any idea ?

Thanks a lot

like image 364
Dabrut Avatar asked Apr 03 '12 17:04

Dabrut


2 Answers

Add a "Done" NSOperation which has all other NSOperations for one directory as dependency.

Something like this:

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 will only run after op1, op2 and op3 have finished executing.

like image 172
Matthias Bauch Avatar answered Nov 15 '22 11:11

Matthias Bauch


[opQueue operationCount]

Hope this helps

like image 32
Radix Avatar answered Nov 15 '22 13:11

Radix