2014-02-26 44 views
0

我‘这样,它做工精细的iOS:可达性AFNetworking

NSMutableArray *mutableOperations = [NSMutableArray array]; 
    for (NSString *stringURL in url_list) { 

     NSURL *url = [NSURL URLWithString:stringURL]; 
     NSURLRequest *request = [NSURLRequest requestWithURL:url]; 

     AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 
     operation.responseSerializer = [AFHTTPResponseSerializer serializer]; 
     [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 

      [self addDataToTotal:[self parseJSONfile:responseObject]]; 

     } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
      NSLog(@"Error: %@", error); 
     }]; 

     [mutableOperations addObject:operation]; 
    } 

    NSArray *operations = [AFURLConnectionOperation batchOfRequestOperations:mutableOperations progressBlock:^(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations) { 
     NSLog(@"progress:%f", (float)numberOfFinishedOperations/totalNumberOfOperations); 
    } completionBlock:^(NSArray *operations) { 
     NSLog(@"All operations in batch complete"); 
     [self startPopulateDBStructure:self.total]; 
    }]; 
    [[NSOperationQueue mainQueue] addOperations:operations waitUntilFinished:NO]; 

现在我想用”做’行动的批量可达性属性“,检查连接状态,我这样做

[[[NSOperationQueue mainQueue]reachabilityManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { 
     switch (status) { 
      case AFNetworkReachabilityStatusReachableViaWWAN: 
      case AFNetworkReachabilityStatusReachableViaWiFi: 
       [[NSOperationQueue mainQueue] setSuspended:NO]; 
       break; 
      case AFNetworkReachabilityStatusNotReachable: 
      default: 
       [[NSOperationQueue mainQueue] setSuspended:YES]; 
       break; 
     } 
    }]; 

但我得到这个消息的崩溃,问题在哪里?

[NSOperationQueue reachabilityManager]: unrecognized selector sent to instance 

回答

1

您正在试图从主NSOperationQueue,它没有它的reachabilityManager。您应该使用[AFNetworkReachabilityManager sharedManager]来获取reachabilityManager实例。


所以:

[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { ... 

另外,还要考虑尝试暂停主队列的逻辑。你可能想要做的是从你的AFHTTPRequestOperationManager实例获得operationQueue和悬浮剂什么......

+0

以及我如何得到它? – CrazyDev

+0

好吧,这个'[AFNetworkReachabilityManager sharedManager]'为'[NSOperationQueue mainQueue]'工作? – CrazyDev

+0

可达性管理器与操作队列无关。而且你似乎不太可能试图暂停主队列...... – Wain

1

试试这个:

 [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { 
      switch (status) { 
      case AFNetworkReachabilityStatusReachableViaWWAN: 
      case AFNetworkReachabilityStatusReachableViaWiFi: 
       [[NSOperationQueue mainQueue] setSuspended:NO]; 
       break; 
      case AFNetworkReachabilityStatusNotReachable: 
      default: 
       [[NSOperationQueue mainQueue] setSuspended:YES]; 
       break; 
     } 
}]; 
0

可以简化@ simalone的回答:

[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { 
     [[NSOperationQueue mainQueue] setSuspended:![AFNetworkReachabilityManager sharedManager].reachable]; 
    } 
}]; 

@Wain是对的,暂停mainQueue听起来不是一个伟大的计划。

使用AFHTTPRequestOperationManager并分配您自己的操作Queue。