Keine internet-Verbindung alert mit AFNetworking 2 und Erreichbarkeit
Ich versuche, herauszufinden, wie eine Meldung "Keine internet Verbindung" alert über AFNetworking 2 und Erreichbarkeit.
Habe ich die Erreichbarkeit und AFNetworking importiert in meinem Controller. Der Teil von meinem code, der mit beginnt AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:url];
ich Weg von der AFNetworking 2 Dokumentation, ich bin mir nicht sicher, ob das ist, wo es hingehört.
UPDATE
Meine app zeigt jetzt eine Warnung, wenn es keine internet-Verbindung, aber es dauert viel zu lange für die Warnmeldung zu zeigen, habe ich auch Zweifel, dies ist der beste Weg, ich kann die Struktur meines Codes. (Auch wenn ich auf die main view-Controller und ich Sie auf eine Zelle, wenn es keine Verbindung, die app stürzt ab, ich weiß nicht, ob es einen Weg gibt, dies zu beheben).
- (void)viewDidLoad
{
[super viewDidLoad];
Reachability * reach = [Reachability reachabilityWithHostname:@"www.google.com"];
reach.reachableBlock = ^(Reachability * reachability)
{
NSLog(@"Reachable");
};
reach.unreachableBlock = ^(Reachability * reachability)
{
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"No internet connection"
message:@"No internet connection"
delegate:self
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alert show];
NSLog(@"Not Reachable");
};
[reach startNotifier];
self.upcomingReleases = [[NSMutableArray alloc] init];
[self makeReleasesRequests];
self.navigationController.navigationBar.tintColor = [UIColor whiteColor]; //Make nav items white
[self.collectionView registerClass:[ReleaseCell class] forCellWithReuseIdentifier:@"ReleaseCell"];
}
-(void)makeReleasesRequests
{
NSURL *url = [NSURL URLWithString:@"http://www.soleresource.com/upcoming.json"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.responseSerializer = [AFJSONResponseSerializer serializer];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"@");
self.upcomingReleases = [responseObject objectForKey:@"upcoming_releases"];
[self.collectionView reloadData];
} failure:nil];
[operation start];
AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:url];
NSOperationQueue *operationQueue = manager.operationQueue;
[manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case AFNetworkReachabilityStatusReachableViaWWAN:
case AFNetworkReachabilityStatusReachableViaWiFi:
[operationQueue setSuspended:NO];
break;
case AFNetworkReachabilityStatusNotReachable:
default:
[operationQueue setSuspended:YES];
break;
}
}];
}
Dank.
- [erreichen startNotifier]; ist nicht optional, es erfordert zu Anfang der Benachrichtigung.
- Überprüfen Sie, was, wenn die Verbindung verloren, während der Prozess
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, diese mit Erreichbarkeit
Ich die AFNetworkingOperationDidFinishNotification. Jedes mal, wenn eine http-Anforderung fehlschlägt, wird die Warnmeldung erscheint und informiert den Benutzer.
ahh ich hatte exakt das gleiche Problem zu löschen, müssen Sie [alert show], und fügen Sie den Haupt-thread, also sollte es so Aussehen,
Wenn Sie mit AFNetworking 3.0, rufen Sie diesen code in ViewDidLoad oder Ihrem AppDelegate :
Stellen Sie sicher, dass Sie anrufen startMonitoring auf die reachabilityManager (stick mit einem integrierten AFNetworking 2, indem in Erreichbarkeit ist überflüssig in diesem Fall).
Sie können das ausprobieren, indem Umschaltung on/off des Flugmodus auf dem Gerät oder simulator. Halten Sie im Verstand, das nicht zur Behandlung von Fällen mit timeouts/langsamen verbindungen/schlechte Anforderungen. Das ist etwas, das Sie haben, um zusammen mit diesem.