2016-05-10 10 views
0

APIコールをいくつか作成する必要があり、それらが外出した順に戻ってくるようにしたいと思います。それが起こるのは正しい流れですか?NSOperationQueue - 同期して実行する

  1. NSOperationQueue
にNSOperationを追加
  • APIにURL文字列を作成APIを呼び出すためのNSOperationブロック、callメソッドを作成し、
  • URL文字列を渡す1
  • に最大同時操作を設定し、NSOperationQueueを作成します。

    これは私が混乱するところです。基本的な同時操作を1に設定すると、基本的にNSOperationQueueが同期キューになります。一度に1つの操作しか呼び出されません。ただし、各操作は非同期のNSURLSession呼び出しを行います。最初の操作が完了するまで、次の操作が実行されないようにするにはどうすればよいですか? (終了すると、返されたJSONをNSArrayに格納し、返されたそれぞれのJSONをその配列に追加します)。

  • 答えて

    0

    NSOperationが順番に実行されるようにする適切な方法は、依存関係を追加することです。依存関係は、異なるキューで異なる操作を順序付けることができるため、強力です。バックグラウンド・キューでAPI呼び出しまたはデータ処理を行うことができます。完了すると、従属操作はメインスレッドのUIを更新できます。

    let operation1 = NSBlockOperation { 
        print("Run First - API Call") 
    } 
    
    let operation2 = NSBlockOperation { 
        print("Run Second - Update UI") 
    } 
    operation2.addDependency(operation1) 
    
    let backgroundQueue = NSOperationQueue() 
    backgroundQueue.addOperation(operation1) 
    NSOperationQueue.mainQueue().addOperation(operation2) 
    
    // operation1 will finish before operation2 is called, regardless of what queue they're in 
    

    がここNSOperationaddDependencyにAppleのドキュメントを参照してください。また、https://developer.apple.com/library/mac/documentation/Cocoa/Reference/NSOperation_class/index.html#//apple_ref/occ/cl/NSOperation

    、それがないことすべてとしてmaxConcurrentOperationCount = 1が唯一の1操作が一度に実行されることを確実にあると仮定して注意してください。これはキューの順序を保証しません。優先度の高い操作が最初に実行される可能性があります。

    関連する問題