2014-02-21 4 views
9

Ich habe versucht, eine Lösung zu finden, um HTTP-Anfragen mit AFNetworking in Warteschlange zu stellen, wenn das Gerät offline ist, also wenn es wieder online geht. Soweit ich das verstanden habe, ist dies möglich, indem Sie den Parameter setReachabilityStatusChangeBlock: einstellen.AFNetworking 2.0 Queue-Anfrage, wenn Gerät offline ist mit setReachabilityStatusChangeBlock macht nichts

Bisher ist das, was ich habe:

// ViewController.h 
@interface XYZTicketViewController : UIViewController<NSURLConnectionDelegate> // This is from before I started using AFNetworking, I'm intending to change all the requests to use AFNetworking in the near future. 
@end 


// ViewController.m 
(...) 
#import <AFHTTPRequestOperationManager.h> 
#import <AFNetworkReachabilityManager.h> 
(...) 
@interface XYZTicketViewController() 
- (void)viewDidLoad 
(...) 
{ 
NSURL *baseURL = [NSURL URLWithString:@"http://54.213.167.202"]; 
AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:baseURL]; 

NSOperationQueue *operationQueue = manager.operationQueue; 
[manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { 
    switch (status) { 
     case AFNetworkReachabilityStatusReachableViaWWAN: 
     case AFNetworkReachabilityStatusReachableViaWiFi: 
      [operationQueue setSuspended:NO]; 
      NSLog(@"WIFI"); 
      break; 
     case AFNetworkReachabilityStatusNotReachable: 
     default: 
      [operationQueue setSuspended:YES]; 
      NSLog(@"oflline, baby"); 
      break; 
    } 
}]; 

NSDictionary *parameters = @{@"action": @"login", @"user": @"[email protected]", @"pass": @"howdoyouturnthison"}; 
[manager GET:@"http://54.213.167.202/api.php" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    NSLog(@"JSON: %@", responseObject); 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"Error: %@", error); 
}]; 
(...) 
} 

Ich kann kein Beispiel finden, aber ich gelesen here dass es möglich ist, aber bisher nichts passiert, wenn die Online-Statusänderungen.

Hoffe, dass Sie mich

Antwort

19

Sie müssen startMonitoring anrufen, bevor Sie setReachabilityStatusChangeBlock

[manager.reachabilityManager startMonitoring] nennen;

Wenn Sie mit AFNetworking 2.0, schlage ich vor, folgende:

[[AFNetworkReachabilityManager sharedManager] startMonitoring]; 
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { 
    DLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status)); 
    switch (status) { 
     case AFNetworkReachabilityStatusReachableViaWWAN: 
     case AFNetworkReachabilityStatusReachableViaWiFi: 
      [operationQueue setSuspended:NO]; 
      NSLog(@"WIFI"); 
      break; 
     case AFNetworkReachabilityStatusNotReachable: 
     default: 
      [operationQueue setSuspended:YES]; 
      NSLog(@"offline, baby"); 
      break; 
    } 
}]; 
+0

Sollten Sie nicht logisch zuerst die Statusänderung Block gesetzt und dann die Überwachung starten? –

+0

Ich habe tatsächlich den obigen Code implementiert - siehe http://stackoverflow.com/questions/29187488/afnetworking-offline-queue, aber die Anfrage wird nie ausgeführt, wenn das Gerät wieder online geht. – p0lAris

0

helfen können Sie manager nicht speichern. Es ist also so, als ob irgendeine lokale Variable beim Verlassen von viewDidLoad gelöscht wird. Speichern Sie es in der Eigenschaft oder Instanzvariable.

+0

ich das täte, aber noch ist nichts passiert –

Verwandte Themen