2012-10-07 3 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

이것이 Apple 버그 인 경우 주변에서 프로그램을 작성해야하는 것처럼 보입니다. 방법을 만들고, 당신의 뷰 컨트롤러에서

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

더 나은 방법이 확신 해요,하지만 적어도 당신은 애플 기다릴 필요가 없습니다.

+0

감사합니다. 알림 수신은 확실히 좋은 방법입니다. –