AppStore で何ヶ月も入手でき、iOS3 と iOS4 で問題なく動作する 2 つのプログラムは、iOS5 と互換性がありません。
Apple は、開発者の生活を少し難しくするためにいくつかのことを変更したように思えます。
問題の1つはこれです:
- (BOOL) webView: (UIWebView *) webView shouldStartLoadWithRequest:(NSURLRequest *) request navigationType: (UIWebViewNavigationType) navigationType {
// Only do something if a link has been clicked
if (navigationType == UIWebViewNavigationTypeLinkClicked) {
NSString *link = [[request URL] absoluteString];
if ([link hasPrefix:@"playSound:"]) {
[PlayAudio playAudio: [link substringFromIndex:10]];
return NO;
}
}
return YES;
}
問題を起こす行は
NSString *link = [[request URL] absoluteString];
クリックしたリンクの変更されていないコピーを取得する前に。iOS3 と iOS4 でも同じです。ただし、iOS5 では小文字のみに変換されます。次の行
if ([link hasPrefix:@"playSound:"]) {
真になることはありません。そのため、コードを次のように変更する必要がありました
- (BOOL) webView: (UIWebView *) webView shouldStartLoadWithRequest:(NSURLRequest *) request navigationType: (UIWebViewNavigationType) navigationType {
// Only do something if a link has been clicked
if (navigationType == UIWebViewNavigationTypeLinkClicked) {
NSString *link = [[[request URL] absoluteString] lowercaseString];
if ([link hasPrefix:@"playsound:"]) {
[PlayAudio playAudio: [link substringFromIndex:10]];
return NO;
}
}
return YES;
}
現在、iOS のすべてのバージョンで小文字を想定しているため、小文字の文字列と比較してください。
どう思いますか: 新しい iOS バージョンでのこのような変更は必要ですか?