16

iOS6以降、アプリケーションがSafariを起動できるかどうかわかりません。

デバイスで Safari が制限されている場合 ([設定] > [一般] > [制限])、URL を開こうとしても何も起こらず、何が問題なのかは示されません。

NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
[[UIApplication sharedApplication] canOpenURL:url]; // Returns YES
[[UIApplication sharedApplication] openURL:url]; // Returns YES

ただし、Safari は起動せ、ユーザーはボタンが「壊れている」理由を疑問に思っています。

これはバグのように思えるので、レーダー #12449905 を提出しました。

この問題を解決する別の方法はありますか?

4

1 に答える 1

2

これが Apple のバグである場合は、それを回避するようにプログラムする必要があるようです。ユーザーがボタンをクリックすると、いつでも次のように記述できます。

[self performSelector:@selector(notifyUserOfRestrictedAccess) withObject:self afterDelay:.5];

アプリ デリゲートでは、次のようなプロパティを設定できます。

- (void)applicationWillResignActive:(UIApplication *)application {
    self.openingExternalProgram = YES;
}

ビュー コントローラーで、次のようなメソッドを作成します。

-(void) notifyUserOfRestrictedAccess {

    if (!appDelegate.openingExternalProgram) {
        // Message the user via UIAlertView about restricted Safari access
    }
    appDelegate.openingExternalProgram = NO;
}

もっと良い方法があると確信していますが、少なくとも Apple を待つ必要はありません。

于 2012-10-26T14:21:40.913 に答える