Подтвердить что ты не робот

Проверка доступности iPhone

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

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

#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.

4b9b3361

Ответ 1

Из вашего снимка экрана кажется, что у вас нет возможности 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"); }
}

Ответ 2

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

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

Рафаэль

Ответ 3

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

[[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"); }

Ответ 4

У вас есть код в любом месте?

[reachability startNotifier];

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

Ответ 5

измените это значение

reachability = [Reachability reachabilityForInternetConnection];

к этому

reachability = [[Reachability reachabilityForInternetConnection] retain];