0

我有一个应用程序,如果它无法访问互联网,它就无法加载任何内容。在我的应用程序委托中,我使用以下代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    //Check for internet
    internetReachableFoo = [Reachability reachabilityWithHostname:@"www.google.com"];

    // Internet is not reachable
    internetReachableFoo.unreachableBlock = ^(Reachability*reach)
    {
        // Update the UI on the main thread
        UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"This is an example alert!" delegate:self cancelButtonTitle:@"Hide" otherButtonTitles:nil];
        alert.alertViewStyle = UIAlertViewStylePlainTextInput;
        [alert show];
        exit(0);
        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"Someone broke the internet :(");

        });
    };
    [internetReachableFoo startNotifier];
    return YES;
}

互联网检查是从此响应链接完成的,然后我想显示一个警告框,告诉用户它在没有互联网的情况下无法工作,然后关闭应用程序。目前我有exit(0);我知道苹果不会接受的,因此在我的警报视图中我需要确定按钮来关闭应用程序(如果苹果允许的话)。我的问题是我不确定如何关闭应用程序,尤其是使用 UIAlert 视图(我对 iOS 还很陌生),如果是显示警报视图的情况,我希望应用程序在警报视图时停止加载其他所有内容如果它没有互联网,它就会启动,因为应用程序无论如何都会崩溃(再次,如果苹果允许您阻止应用程序继续加载)我怎样才能以苹果批准的方式解决这个问题?

4

2 回答 2

6

这里有几件事。

1)你应该在“”以外didFinishLaunchingWithOptions地方检查可达性,也许在其他地方比如说......你的第一个视图控制器?

如果“ didFinishLaunchingWithOptions”返回的时间过长,iOS 会假定(读取异常代码0x8badf00d:)您的应用程序已死并杀死它。

2)如果您确实将您的可达性代码放入第一个视图控制器中,那么您可以很容易地调出您的 UIAlertView。

例如,将“ UIAlertView”实例变量(或 ivar)添加到您的视图控制器。

如果它为空,则继续执行视图正在执行的任何操作。如果它存在(即如果互联网关闭并且正在显示警报),则暂停视图控制器中的所有其他内容,直到用户自行退出。

或者....当用户将应用程序带回前台并自行关闭警报视图并查看互联网是否恢复时重置事物。

于 2013-07-30T04:02:13.440 回答
1

不要关闭应用程序。苹果肯定会拒绝这一点。

此外,通常更好的形式是尝试所有相同的请求并优雅地处理失败。互联网信号可能是断断续续的,一次失败不一定会彻底毁掉它。

于 2013-07-30T04:01:55.893 回答