[解決済み] iOSまたはmacOSで、インターネット接続が有効かどうかを確認するにはどうすればよいですか?
質問
iOSでインターネットに接続しているかどうか確認するために Cocoa Touch ライブラリ、またはmacOSでは ココア のライブラリーを使用します。
を使う方法を思いつきました。
NSURL
. Googleが応答しない場合、他のウェブサイトからの応答を確認することができますが、それは無駄であり、私のアプリケーションに不必要なオーバーヘッドであると思われます。
- (BOOL) connectedToInternet
{
NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]];
return ( URLString != NULL ) ? YES : NO;
}
私がしてきたことは悪いことなのか、(言うまでもないことですが
stringWithContentsOfURL
iOS 3.0とmacOS 10.4では非推奨)また、もしそうなら、これを達成するためのより良い方法は何でしょうか?
どのように解決するのですか?
重要 : このチェックは 常に は非同期で実行されます。以下の回答の大半は同期なので、そうでない場合はアプリがフリーズしてしまうので注意してください。
スウィフト
-
CocoaPodsまたはCarthage経由でインストールします。 https://github.com/ashleymills/Reachability.swift
-
クロージャによる到達性テスト
let reachability = Reachability()! reachability.whenReachable = { reachability in if reachability.connection == .wifi { print("Reachable via WiFi") } else { print("Reachable via Cellular") } } reachability.whenUnreachable = { _ in print("Not reachable") } do { try reachability.startNotifier() } catch { print("Unable to start notifier") }
オブジェクティブC
-
追加
SystemConfiguration
フレームワークをプロジェクトに組み込みますが、どこに組み込むかは気にしないでください。 -
Tony Millionのバージョンに
Reachability.h
とReachability.m
をプロジェクトに追加します(ここにあります。 https://github.com/tonymillion/Reachability ) -
インターフェイスセクションの更新
#import "Reachability.h" // Add this to the interface in the .m file of your view controller @interface MyViewController () { Reachability *internetReachableFoo; } @end
-
そして、このメソッドをビューコントローラの .m ファイルに実装し、以下のように呼び出します。
// Checks if we have an internet connection or not - (void)testInternetConnection { internetReachableFoo = [Reachability reachabilityWithHostname:@"www.google.com"]; // Internet is reachable internetReachableFoo.reachableBlock = ^(Reachability*reach) { // Update the UI on the main thread dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"Yayyy, we have the interwebs!"); }); }; // Internet is not reachable internetReachableFoo.unreachableBlock = ^(Reachability*reach) { // Update the UI on the main thread dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"Someone broke the internet :("); }); }; [internetReachableFoo startNotifier]; }
重要なお知らせです。
は
Reachability
クラスはプロジェクトで最もよく使われるクラスのひとつなので、他のプロジェクトと名前の衝突が発生する可能性があります。 このような場合は、ペアになった
Reachability.h
と
Reachability.m
ファイルを他のものに変更すると解決します。
注意 使用するドメインは関係ありません。任意のドメインへのゲートウェイをテストしているだけです。
関連
-
[解決済み】Git リポジトリから .DS_Store ファイルを削除するには?
-
[解決済み】Xcode - 'NSUnknownKeyException', reason: ... this class is not key value coding-compliant for the key X" エラーの修正方法とは?
-
制御が非ボイド関数の終了に達する
-
[解決済み] macOSアップデート後、Gitが動作しない(xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools)
-
[解決済み] UITableViewの選択を無効にするにはどうすればよいですか?
-
[解決済み] iOSのバージョンを確認する方法を教えてください。
-
[解決済み] Xcode 6のバグ:Interface Builderファイル内の不明なクラス
-
[解決済み] Unwind segueは何に使うのか、どう使うのか?
-
[解決済み] UITextFieldのテキストインセット?
-
[解決済み】iOSアプリの名前を変更する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Objective-Cでデリゲートを作成するにはどうしたらいいですか?
-
[解決済み] iPhone UITextField - プレースホルダーの文字色を変更する
-
[解決済み] SwiftでUIAlertViewを作成するにはどうしたらいいですか?
-
[解決済み] UIButtonのタイトルを左揃えにするにはどうしたらよいですか?
-
[解決済み] NSOperationとGrand Central Dispatchの比較
-
[解決済み] アプリのプレビュー用にiOSシミュレータのビデオをキャプチャー
-
[解決済み] iOS 13でダークモードをオプトアウトすることは可能ですか?
-
[解決済み] Swift 3でディスパッチキューを作成する方法
-
[解決済み] セキュリティで保護されたWebサービスにもアクセスするiOSアプリで、Facebook認証を行うためのデザイン
-
[解決済み] iPhoneでナビゲーションバーを1ページ目だけ非表示にする