当应用程序没有互联网时UIAlertView

时间:2013-07-30 03:58:49

标签: ios objective-c

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

- (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;
}

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

2 个答案:

答案 0 :(得分:6)

这里有一些事情。

1)你应该在其他而不是“didFinishLaunchingWithOptions”的某个地方检查Reachability,或许在其他地方比如说......你的第一个视图控制器?

如果“didFinishLaunchingWithOptions”需要很长时间才能返回,iOS assumes(读取异常代码:0x8badf00d)您的应用已经死亡并将其杀死。

2)如果你确实将你的Reachability代码放到了第一个视图控制器中, 就可以很容易地调出你的UIAlertView。

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

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

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

答案 1 :(得分:1)

请勿关闭该应用。 Apple肯定会拒绝这一点。

此外,通常更好的形式是尝试所有相同的请求并优雅地处理失败。互联网信号可能是间歇性的,一次失败不一定会破坏它。