2012-10-07 5 views
16

Seit iOS6 kann ich nicht sagen, ob die Anwendung Safari starten kann oder nicht.UIApplication -canOpenURL: -openURL: irreführendes Ergebnis zurückgeben

Wenn Safari auf dem Gerät (Einstellungen> Allgemein> Einschränkungen) beschränkt ist, passiert nichts, wenn eine URL zu öffnen versucht, und es gibt keinen Hinweis darauf, was schief gelaufen ist:

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

Allerdings ist Safari nicht starten, und der Benutzer fragt sich, warum meine Tasten "kaputt" sind.

Dies scheint wie ein Fehler für mich, also habe ich ein Radar # 12449905.

Gibt es eine andere Möglichkeit, dieses Problem zu lösen?

+0

Sind Radare öffentlich? Ich kann keinen "Such" -Knopf neben dem für das Suchen von Radaren finden, die ich selbst eingereicht habe ... – jcayzac

+0

@jcayzac Nein, aber ich habe es zu openradar hinzugefügt: http://openradar.appspot.com/12449905 – hwaxxer

+0

Funktioniert es mit 'https : // '? Da es sich um einen Fehler handelt, kann es sein, dass es sich ohne erkennbaren Grund zufällig dafür entscheidet, mit einem anderen URL-Schema zu arbeiten. – Greg

Antwort

2

Wenn dies ein Apple Bug ist, dann sieht es so aus, als ob Sie programmieren müssen. Sobald der Benutzer auf die Schaltfläche klickt, kann man immer so etwas schreiben:

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

Im AppDelegate können Sie eine Eigenschaft wie:

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

In Ihrem View-Controller, erstellen Sie die Methode wie folgt:

Ich bin mir sicher es gibt bessere Wege, aber zumindest muss man nicht auf Apple warten.

+0

Danke ... auf die Benachrichtigung zu hören ist definitiv ein besserer Weg. –

Verwandte Themen