Вопрос

Я нашел несколько примеров кода, который делает то, что я хочу (проверяет достижимость), но ни один из них не кажется мне достаточно точным, чтобы быть полезным для меня.Я не могу понять, почему это не хочет быть вежливым.

У меня есть достижимость.h / m в моем проекте, я делаю

#import <SystemConfiguration/SystemConfiguration.h>

И я добавил фреймворк.У меня также есть:

#import "Reachability.h"

в верхней части .m, в котором я пытаюсь использовать достижимость.

Reachability* reachability = [Reachability sharedReachability];
[reachability setHostName:@"http://www.google.com"];    // set your host name here
NetworkStatus remoteHostStatus = [reachability remoteHostStatus];

if(remoteHostStatus == NotReachable) {NSLog(@"no");}
else if (remoteHostStatus == ReachableViaWiFiNetwork) {NSLog(@"wifi"); }
else if (remoteHostStatus == ReachableViaCarrierDataNetwork) {NSLog(@"cell"); }

Это создает мне всевозможные проблемы.Что я делаю не так?Я хороший программист, просто мне трудно, когда приходит время, понять, что нужно поместить, где включить то, что я хочу делать, независимо от того, хочу ли я знать, что я хочу делать, или нет.(Так расстраивает)

Обновить:Это то, что происходит.Это в моем viewcontroller, который у меня есть

#import <SystemConfiguration/SystemConfiguration.h>

и

#import "Reachability.h"

настроить с помощью.На сегодняшний день это моя наименее любимая часть программирования.reachability problems
(источник: sneakyness.com)


FWIW, мы так и не смогли реализовать это в нашем коде.Две функции, для которых требовался доступ в Интернет (участие в розыгрыше призов и покупка DVD), не были основными функциями.Больше ни для чего не требовался доступ в Интернет.

Вместо добавления дополнительного кода мы просто устанавливаем фоном обоих интернет-представлений уведомление, сообщающее пользователям, что они должны быть подключены к Интернету, чтобы использовать эту функцию.Это было в тему с остальным интерфейсом приложения и сделано хорошо / со вкусом.Они ничего не сказали об этом в процессе утверждения, однако нам позвонили лично, чтобы убедиться, что мы раздаем предметы, которые действительно имели отношение к фильму.Согласно их обычно расплывчатому соглашению, в противном случае вам не разрешается участвовать в лотереях.

Я бы также подумал, что это более строго соответствует их идеологии "используйте вещи только в том случае, если они вам абсолютно нужны".

Вот ссылка iTunes на приложение EvoScanner.

Это было полезно?

Решение

Судя по вашему снимку экрана, кажется, что в ваш проект не добавлена достижимость.Вы должны загрузить Reachability с Apple:

https://developer.apple.com/library/content/samplecode/Reachability/Introduction/Intro.html

И добавьте оба файла .h и .m в свой проект.

Обновить:Вы отметили, что у вас есть Достижимость.Но, глядя на самую последнюю версию, я могу понять, почему у вас есть перечисленные вами ошибки - они изменили API, и вы, вероятно, используете пример кода, который нашли где-то в другом месте.Попробуй:

в файле .h:

//import Reachability class
#import "Reachability.h"

// declare Reachability, you no longer have a singleton but manage instances
Reachability* reachability;

в файле .m:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNetworkChange:) name:kReachabilityChangedNotification object:nil];

reachability = [Reachability reachabilityForInternetConnection];
[reachability startNotifier];

NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];

 if(remoteHostStatus == NotReachable) {NSLog(@"no");}
else if (remoteHostStatus == ReachableViaWiFi) {NSLog(@"wifi"); }
else if (remoteHostStatus == ReachableViaWWAN) {NSLog(@"cell"); }

.....

- (void) handleNetworkChange:(NSNotification *)notice
{

  NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];

   if(remoteHostStatus == NotReachable) {NSLog(@"no");}
else if (remoteHostStatus == ReachableViaWiFi) {NSLog(@"wifi"); }
else if (remoteHostStatus == ReachableViaWWAN) {NSLog(@"cell"); }
}

Другие советы

[reachability setHostName:@"http://www.google.com"];

Внимание!Я столкнулся с проблемой, заключающейся в том, что он всегда "Недоступен", если используется префикс http://.

Рафаэль

Вот правильный код, поскольку он работает у меня сегодня!!!

[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(handleNetworkChange:) name: kReachabilityChangedNotification object: nil];

reachability = [Reachability reachabilityForInternetConnection];

[reachability startNotifier];

NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];

if(remoteHostStatus == NotReachable) {NSLog(@"no");}
else if (remoteHostStatus == ReachableViaWiFi) {NSLog(@"wifi"); }
else if (remoteHostStatus == ReachableViaWWAN) {NSLog(@"cell"); }

Есть ли у вас где-нибудь следующий код?

[reachability startNotifier];

если ваш код доступности взят из примера Apple, то вам нужно сделать это, прежде чем она сможет начать сообщать вам об обновлениях статуса.

измените это

reachability = [Reachability reachabilityForInternetConnection];

к этому

reachability = [[Reachability reachabilityForInternetConnection] retain];
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top