2

で一連のネットワーク操作を実行しようとしていますAFNetworking。例えば:

[SomeApiICreated doNetworkingStuff success:^(NSString *message)
                           {
                             NSLog(@"Yay!");
                           }
                           failure:^(NSError *error)
                           {
                             NSLog(@"Oh noes!");
                           }];

doNetworkingStuff 内で、潜在的に複数のネットワーク タスクを実行したいと考えています。例えば

  1. アプリ トークンを取得する
  2. if ( appTokenGot) step3 else callFailure
  3. アプリ トークンを使用してもののリストを取得する
  4. if ( listGot) step5 elsecallFailure

しかし、ステップ 3 以降のみを実行する a も呼び出したいと思いdoNetworkingStuff2ます。基本的には、必要に応じて操作をキューに入れたり、それらを組み合わせたりすることができます。 」、または「問題が発生しました」

これはNSOperationQueue正しいことですか、それとも「もしこれなら、これ」ブロックのネストされた関数がこれを行うための最良の方法ですか?

どんな例も役に立ちます。

4

2 に答える 2

1

成功/失敗ブロック内からデータを渡す他の関数を呼び出すだけではどうですか。たとえば、App.net API でこのようなものを使用します。

[[KSADNAPIClient sharedAPI] postPath:@"stream/0/posts"
                              parameters:params
                                 success:^(AFHTTPRequestOperation *operation, id responseObject)
     {
         [[KSPostsController sharedController] addPosts:responseObject];
     }
                                 failure:^(AFHTTPRequestOperation *operation, NSError *error)
     {
         if (block) {
             block([NSArray array], error);
         }
     }];

このようにして、成功ブロックと失敗ブロックに大量のロジックを積み上げることはありません。

于 2012-12-29T15:58:49.830 に答える
0

私の知る限り、これを行う最善の方法は、完了コールバックを使用して連続した呼び出しを行うことです。後続のステップを実行するには応答オブジェクトが必要であるため、成功コールバックでこのオブジェクトを受け取ることに注意してください。

于 2012-12-30T10:48:35.717 に答える