1

AFNetworkingフレームワークを使用しています。そこで、AFHTTPClientのサブクラスを作成しました。

 + (MyNetClient *)sharedClient
 {    
      static MyNetClient *_sharedClient = nil;
      static dispatch_once_t oncePredicate;

      dispatch_once(&oncePredicate, ^{
         _sharedClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:BASE_API_URL]];
      });

      return _sharedClient;
 }

また、サーバーからJSONをダウンロードするためのいくつかのメソッドを追加しました。

したがって、私の見解では、viewWillAppearで次のようにダウンロードを開始します。

[[MyNetClient sharedClient] getArrOfDataWithName:name
                                     block:^(NSArray *arr) {
}];

どこ:

- (void)getArrOfDataWithName:(NSString *)name block:^(NSArray *arr)block
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    NSMutableDictionary *params = [NSMutableDictionary
                                   dictionaryWithObjectsAndKeys:name,@"name",nil];
    [self getPath:[self urlToService:@"data/get.json"] parameters:params
          success:^(AFHTTPRequestOperation *operation, id responseObject) {

              NSLog(@"result operation%@",operation);
              BOOL res = [operation isCancelled];
              if (!res)
              {
                dispatch_async(dispatch_get_main_queue(), ^{
                          block(responseObject);
                });
              }
          }
          failure:^(AFHTTPRequestOperation *operation, NSError *error) {

              dispatch_async(dispatch_get_main_queue(), ^{
                  block(nil);
              });
          }];
});

}

時間がかかり、ユーザーが押し戻すことができるので、viewDidDisappearでのダウンロードをキャンセルします。

- (void)viewDidDisappear:(BOOL)animated
{
   [super viewDidDisappear:animated];
   [[[LRLoopNetClient sharedClient] operationQueue] cancelAllOperations];
}

ただし、ダウンロード操作はキャンセルされません。次の行のgetArrOfDataWithNameにブレークポイントを追加しました。

 NSLog(@"result operation%@",operation);
 BOOL res = [operation isCancelled];

res = NOで、ビューを離れた後に呼び出されます。私はそれをチェックしました:

 NSInteger count = [[[LRLoopNetClient sharedClient] operationQueue] operationCount];
 NSLog(@"number operations: %i",count);

viewDidDisappear番号操作で:0ダウンロードをキャンセルするのを手伝ってください。

4

0 に答える 0