2012-10-07 31 views
16

Vì iOS6, tôi không thể biết ứng dụng có thể khởi chạy Safari hay không.UIApplication's -canOpenURL: -openURL: trả về kết quả gây hiểu nhầm

Nếu Safari bị hạn chế trên thiết bị (Settings> General> Restrictions), không có gì xảy ra khi cố gắng mở một URL, và không có dấu hiệu của những gì đã xảy ra:

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

Tuy nhiên, Safari không không khởi chạy và người dùng bị bỏ lại tự hỏi tại sao các nút của tôi bị "hỏng".

Điều này có vẻ giống như một lỗi đối với tôi vì vậy tôi đã gửi một radar # 12449905.

Có cách nào khác để giải quyết vấn đề này không?

+0

Radio có công khai không? Tôi không thể tìm thấy bất kỳ nút "tìm kiếm" nào bên cạnh đó để tìm kiếm các radar tôi đã tự gửi ... – jcayzac

+0

@jcayzac Không, nhưng tôi đã thêm nó vào openradar: http://openradar.appspot.com/12449905 – hwaxxer

+0

Nó có hoạt động với 'https không : // '? Vì nó là một lỗi, nó có thể chỉ ngẫu nhiên quyết định làm việc với một lược đồ URL khác nhau mà không có lý do rõ ràng. – Greg

Trả lời

2

Nếu đây là lỗi của Apple, thì có vẻ như điều bạn cần làm là lập trình xung quanh nó. Khi người dùng nhấp vào nút, bạn luôn có thể viết một cái gì đó như thế này:

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

Trong các đại biểu ứng dụng, bạn có thể thiết lập một tài sản như:

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

Trong điều khiển xem của bạn, tạo ra phương pháp như thế này:

-(void) notifyUserOfRestrictedAccess { 

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

Tôi chắc chắn có những cách tốt hơn, nhưng ít nhất bạn không phải đợi Apple.

+0

Cảm ơn ... lắng nghe thông báo chắc chắn là một cách tốt hơn. –