39

やりたいことを実行するためのコードの例をいくつか見つけました (到達可能性を確認してください) が、どれも私に役立つほど正確ではないようです。なぜこれがうまくプレイしたくないのか理解できません。

私は自分のプロジェクトに 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"); }

これは私にあらゆる種類の問題を与えています。私は何を間違っていますか?私は大丈夫なコーダーです。やりたいことを知りたいかどうかに関係なく、やりたいことを有効にするために何をどこに置く必要があるかを理解するのに苦労しています。(とてもイライラする)

更新:これが起こっていることです。これは、私が持っているビューコントローラーにあります

#import <SystemConfiguration/SystemConfiguration.h>

#import "Reachability.h"

で設定します。これは、私がプログラミングで最も嫌いな部分です。(出典:snekyness.com到達可能性の問題


FWIW、コードにこれを実装することはありませんでした。インターネット アクセスを必要とする 2 つの機能 (懸賞への参加と DVD の購入) は、主要な機能ではありませんでした。他にインターネットアクセスは必要ありません。

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

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

アプリケーション EvoScanner への iTunes リンクは次のとおりです。

4

5 に答える 5

65

スクリーンショットから、プロジェクトに到達可能性が追加されていないようです。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"); }
}
于 2009-12-07T21:55:40.793 に答える
29
[reachability setHostName:@"http://www.google.com"];

注意!http:// プレフィックスを使用すると、常に「NotReachable」になるという問題が発生しました。

ラファエル

于 2010-03-16T03:26:25.393 に答える
7

これが今日私のために働く正しいコードです!!!

[[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"); }
于 2010-08-15T10:39:02.813 に答える
3

以下のコードはどこかにありませんか?

[reachability startNotifier];

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

于 2009-12-07T17:59:12.740 に答える
-3

これを変える

reachability = [Reachability reachabilityForInternetConnection];

これに

reachability = [[Reachability reachabilityForInternetConnection] retain];
于 2012-02-11T11:10:09.503 に答える