2014-02-26 99 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。