web-dev-qa-db-ja.com

iPhoneの到達可能性チェック

私がやりたいこと(到達可能性のチェック)を行うコードの例をいくつか見つけましたが、どれも私に役立つほど正確ではないようです。なぜこれがニースをプレイしたくないのかわかりません。

私は私のプロジェクトにreachability.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、私たちはこれをコードに実装することはありませんでした。インターネットアクセスを必要とする2つの機能(懸賞への参加とDVDの購入)は、主な機能ではありませんでした。他にインターネットへのアクセスは必要ありません。

コードを追加する代わりに、両方のインターネットビューの背景を、この機能を使用するにはインターネットに接続する必要があることをユーザーに通知する通知に設定するだけです。これは、アプリケーションの残りのインターフェイスをテーマにしたもので、うまく/上品に行われました。彼らは承認プロセスの間にそれについて何も言わなかったが、私たちは実際に映画に関係するアイテムを配っていることを確認するために個人的な電話を受けた。彼らの通常曖昧な合意によると、そうでなければ懸賞をすることはできません。

また、これは「絶対に必要な場合にのみ使用する」という考え方にも厳密に準拠していると思います。

アプリケーションへのiTunesリンク、EvoScannerです。

40
Sneakyness

スクリーンショットから、プロジェクトに到達可能性が追加されていないようです。 AppleからReachabilityをダウンロードする必要があります。

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://プレフィックスを使用すると、常に「NotReachable」になるという問題が発生しました。

ラファエル

28
Raphael Schaad

これが今日の私に合った正しいコードです!!!

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

どこかに次のコードがありますか?

[reachability startNotifier];

到達可能性コードがAppleの例からのものである場合、ステータスの更新の報告を開始する前にそれを行う必要があります。

3
Kevlar