NSOperationQueue addOperations waitUntilFinished

Hi, I am building an application using Swift. I need to process notifications in a specific order. So I'm trying to use addOperations waitUntilFinished.

Here is what I did:

let oldify = NSOperation()
    oldify.completionBlock = {
println("oldify")
}
let appendify = NSOperation()
    appendify.completionBlock = {
println("appendify")
}
let nettoyify = NSOperation()
    nettoyify.completionBlock = {
println("nettoyify")
}
NSOperationQueue.mainQueue().maxConcurrentOperationCount = 1
NSOperationQueue.mainQueue().addOperations([oldify, appendify, nettoyify], waitUntilFinished: true)

With this code, none of the operations are performed. When I try this:

NSOperationQueue.mainQueue().maxConcurrentOperationCount = 1
NSOperationQueue.mainQueue().addOperation(oldify)
NSOperationQueue.mainQueue().addOperation(appendify)
NSOperationQueue.mainQueue().addOperation(nettoyify)

Operations are performed, but not in the correct order.

Does anyone know what I'm doing wrong? I am sure of a fast but completely new to NSOperations.

+4
source share
1 answer

A few problems:

  • You study the behavior of completion block handlers. As stated in the documentation completionBlock:

    , . , .

    , ( completionBlock). , (), , () completionBlock completionBlock .., (c) .

  • , . , , , , . .

  • , :

    . , , isReady YES - , . , . . , , NSOperation.

    , - :

    let oldify = NSBlockOperation() {
        NSLog("oldify")
    }
    oldify.completionBlock = {
        NSLog("oldify completion")
    }
    
    let appendify = NSBlockOperation() {
        NSLog("appendify")
    }
    appendify.completionBlock = {
        NSLog("appendify completion")
    }
    
    appendify.addDependency(oldify)
    
    let nettoyify = NSBlockOperation() {
        NSLog("nettoyify")
    }
    nettoyify.completionBlock = {
        NSLog("nettoyify completion")
    }
    
    nettoyify.addDependency(appendify)
    
    let queue = NSOperationQueue()
    queue.addOperations([oldify, appendify, nettoyify], waitUntilFinished: false)
    
  • , , waitUntilFinished. , , , waitUntilFinished.

+5

All Articles