UIApplication -canOpenURL: -openURL: вернуть неверный результат

С 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.

Есть ли другой способ решить эту проблему?

Ответы

Ответ 1

Если это ошибка 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.