2016-02-25 2 views
10

共有エクステンションでAFNetworkingに問題があります。 didSelectPostでは、私が呼んでいる:AFNetworkingを使用して共有エクステンションの成功/失敗コールバックを取得しない

[[AuthClient sharedClient] POST: @"/v1/events" 
    parameters: params success:^(AFHTTPRequestOperation * operation, id responseObject) { 
     [self.extensionContext completeRequestReturningItems: nil completionHandler: nil]; 
    } 
    failure:^(AFHTTPRequestOperation * operation, NSError * error) { 
     NSLog(@"error: %@", error); 
     [self.extensionContext cancelRequestWithError: error]; 
    } 
]; 

[AuthClient sharedClient]背景識別子に設定NSURLSessionConfigurationAFHTTPSessionManagerのインスタンスを取得するにはシングルトンパターンを使用しています。

しかし、成功または失敗のコールバックは呼び出されず、拡張機能が終了するまで無期限にハングアップしません。興味深いことに、HTTPリクエストはサーバー側で正常終了します。完了は決して呼び出されません。

+0

なぜ新しいAFNクラスを試してみませんか? –

+0

デバッガで一時停止して、すべてのスタックを確認できますか?それらのうち2人が同じロックを取ろうとしているかどうかを確認してください。 (または他のいずれかのロック) – nielsbot

答えて

4

私は、問題はAFNetworkingではないと思いますが、そのシングルトンクラスに問題があります。あなたはあなたのアプリケーションのアーキテクチャを指定していませんが、同じ[AuthClient sharedClient]シングルトンを同時に使用して、異なるView Controllerで複数のAPIを呼び出すかもしれないと仮定しています。したがって、実際にはsuccessコールを受信して​​いますが、上記のコールではなく、コントローラ内のその他のコールを受信して​​います。私はUITabbarControllerベースのアプリケーションで正確な問題に直面していました。ここでは、異なるビューコントローラのviewDidLoadでAPI呼び出しを行い、テスターはすべてのタブを連続的に変更していました。したがって、私は最初のビューコントローラ(1番目のタブ)の応答を取得しようとし、2番目のビューコントローラ(2番目のタブ)で応答を取得するために使用されましたが間違っていました!

+0

同意する... NSLog()の行を成功ブロックに貼り付け、呼び出されていないことを確認することができます。あなたがシングルトン上でインスタンス変数を使用しているので、1つの拡張コンテキストしか存在しないので、別のコールが起動されたときにコールが飛ぶ可能性がある場合は、コールバックを受信するのは1つだけです。 – Fiid

+0

ロギングは役に立ちませんでしたが、問題はシングルトンにありました。アプリ固有の詳細にはなりませんが、これは正しい軌道に乗ります – iMack

1

1)OKがあれば、ポストマンでこの要求を実行し、ための正しい方法とパラメータをチェックしてみてください - > 2.

2)この時にこの

NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration]; 

// Initialize Session Manager 
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:sessionConfiguration]; 

のようなセッション構成を使用してみてくださいあなたのシングルトンが別の設定で別のリクエストのために初期化されたと仮定することができます。

3)similar problem

4)about AFNetworking background

P.S.応答

1

を待っている間にスピンナーで、メインスレッド上で、私が試してみたいくつかのものの単純な非同期を使用してみてください:ネットワークトレースと健全性チェックを行います

  • を。 のデータがクライアントに届いていることを確認してください。
  • ブレークポイントを設定し、 ブロックされたスレッドまたは異常(AppleネットワーキングAPI自体、つまりCFNetworkingまたはNSURLSessionなど)を無効にすることを検討してください。
  • シンプトンオブジェクトによってラムダ/コンプリートブロック が適切に設定/保持されていることを確認してください。シングルトンを使用せずに単純なテストルーチンを作成してみましょう(手動でクラスをインスタンス化し、それ)。
  • 「成功」完了ハンドラがデバッグメッセージを出力するかどうかは分かりません。ハンドラにまだNSLogがない場合はNSLogもそこに追加することを検討してください。

がうまくいけば、このうちのいくつかは、問題を引き起こしているものの考え方に近いあなたをもたらすことができます。

関連する問題