2012-10-07 14 views
16

iOS6以降、アプリケーションがSafariを起動できるかどうかはわかりません。UIApplicationの-canOpenURL:-openURL:誤った結果を返す

サファリは、(設定>一般>制限)デバイスに制限されている場合は、URLを開こうとすると何も起こらない、と何が悪かったのかの兆候がありません:

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

しかし、Safariがはしませんが起動し、ユーザーはなぜ私のボタンが「壊れているのか」という疑問が残っています。

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

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

+0

レーダーは公開されていますか? – jcayzac

+0

@jcayzacいいえ、openradarに追加しました:http://openradar.appspot.com/12449905 – hwaxxer

+0

'httpsで動作しますか? :// '?それはバグであるため、明らかに理由がないためにランダムに別のURLスキームを使用することにします。 – Greg

答えて

2

これはアップルのバグであれば、あなたの周りにプログラムすることができるように見えます。メソッドを作成し、ビューのコントローラで

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

:あなたのようなプロパティを設定することができ、アプリのデリゲートで

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

:ユーザーがボタンをクリックすると、あなたは常にこのような何かを書き込むことができます

-(void) notifyUserOfRestrictedAccess { 

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

私は確かに良い方法がありますが、少なくともAppleを待つ必要はありません。

+0

ありがとうございます...通知を聞いて間違いなく良い方法です。 –

関連する問題