私の最初のView ControllerのviewDidLoadで、インターネット接続を確認し、利用可能な場合はダウンロードプロセスを開始します。
接続 (WiFi またはモバイル) またはインターネットが利用できない場合 - すべて問題ありません。ただし、デバイスがインターネットなしで WiFi に接続されている場合、アプリケーションはフリーズします。
if ([self isInternetAvail]) {
[[Download sharedDownload] startUpdateProcessWithIndicatorInViewController:self];
}
これは機能です:
- (BOOL)isInternetAvail
{
NSString *hostName = @"google.com";
Reachability *hostReach = [Reachability reachabilityWithHostName:hostName];
NetworkStatus netStatus = [hostReach currentReachabilityStatus];
if (netStatus == NotReachable) {
return NO;
} else {
return YES;
}
}
次の行でアプリケーションがフリーズします。
NetworkStatus netStatus = [hostReach currentReachabilityStatus];
インターネット接続を確認するより適切な方法は使用していますNSNotificationCenter
が、この場合:
1) didFinishLaunchingWithOptionsで:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(networkStateChanged:)
name:kReachabilityChangedNotification
object:nil];
hostReach = [Reachability reachabilityWithHostName:@"www.google.com"];
[hostReach startNotifier];
[self updateInternetAvailWithReachability: hostReach];
追加の方法:
- (void)updateInternetAvailWithReachability: (Reachability *)curReach
{
netStatus = [curReach currentReachabilityStatus];
}
- (void)networkStateChanged:(NSNotification *)notification
{
Reachability *curReach = [notification object];
NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
[self updateInternetAvailWithReachability:curReach];
}
2)私の最初のView ControllerのviewDidLoadで:
AppDelegate *d = (AppDelegate *)[[UIApplication sharedApplication] delegate];
if (!d.netStatus == NotReachable) {
[[Download sharedDownload] startUpdateProcessWithIndicatorInViewController:self];
}
このステップでNotReachableを取得し、ダウンロードを開始できません
3) NSNotificationCenter は、「インターネットが利用可能です」と教えてくれます
これを準備する方法についてアドバイスが必要です。