GoogleプレイスAPIを使用して検索バーにオートコンプリートを統合しています。ネットワーキングリクエストについては、AFNetworkingを使用しています。なぜAFHTTPRequestOperationがキャンセルされて成功ブロックにヒットするのですか?
一度に1つのリクエストしか実行しません。だから、毎回私は新しい文字を入力し、私は次の操作を行います
1 - 前回AFHTTPRequestOperationキャンセル:
[self.currentGlobalSearchListRequest cancel];
NSLog(@"%@ cancelled", self.currentGlobalSearchListRequest);
2 - 新AFHTTPRequestOperationを起動します。コールバックはここ
self.currentGlobalSearchListRequest = [searchService getGlobalSearchListItemsForString:searchString inRegion:region delegate:self];
NSLog(@"%@ started", self.currentGlobalSearchListRequest);
と呼ばれています要求が実行を終了したとき:
- (void)request:(PointSearchRequest *)request didLoadSearchListItems:(NSArray *)searchListItems {
NSAssert(request == self.currentGlobalSearchListRequest, @"!!!callback from a request that should be cancelled!!!");
[self.delegate searchListLoader:self didLoadGlobalSearchList:searchListItems];
}
時々私はアサートを打つ私はちょっと調べて、ほとんどの場合 エラーブロックNSURLErrorCancelled
と呼ばれるエラーブロックが呼び出されることを発見しました。これは予想される動作ですが、成功ブロックが呼び出されることもあります。
このスタックトレースが私のコードで物事を正しい順序
2013-12-22 09:38:46.484 Point[63595:a0b] <PointSearchRequest: 0x18202b50> started
2013-12-22 09:38:46.486 Point[63595:a0b] <PointSearchRequest: 0x18202b50> cancelled
2013-12-22 09:38:46.487 Point[63595:a0b] <PointSearchRequest: 0x181a5dd0> started
2013-12-22 09:38:46.496 Point[63595:a0b] *** Assertion failure in -[SearchListLoader request:didLoadSearchListItems:], /Users/aurelienporte/Documents/Developpement/Perso/iOS/Point/Point/Classes/Models/SearchListLoader.m:82
(lldb) po request
<PointSearchRequest: 0x18202b50>
プラスに発生したことを私に告げる成功ブロックが呼び出されたとき、私はAFHTTPRequestOperationのプロパティisCancelled
を見ていないが、それは(NO、私を与えます! ) 私はNSAssertを使用する代わりにテストを終了することができますが、問題の原因を突き止めたいと思います。
キャンセルが実際にリクエストをキャンセルしない同様の問題が発生しましたか?そして、失敗ブロックの代わりに成功ブロックが呼び出されますか?これはAFNetworkingチームに報告するための問題ですか?ありがとう!それは助けることができるならば、我々はすべて知っているよう
、リクエストが
私はこれを期待しています。完了ハンドラを起動していない完了した操作をキャンセルすることはあいまいです。完了ハンドラを起動するか、取り消しを受け入れることができます。私は時間の100%起こってどちらかに数えません。 –