iOS 5.1 を搭載した iPhone 3G で実行すると、カテゴリ メソッドの 1 つがオーバーライドされるという奇妙な動作が発生します。
私はこのカテゴリを持っています:
@interface NSURL (queryParameters)
- (NSDictionary *) queryParameters;
@end
NSString キーと NSArray 値 (URL に同じ名前の複数のパラメーター) を含む辞書を返します。
期待していた NSArray の代わりに値として NSString を持つ NSDictionary を取得する上記のデバイスを除いて、正常に動作します (私の URL の最後のパラメーターに対応します)。
ダミーの NSURL を構築した空のプロジェクトを作成し、それがセレクター「queryParameters」に応答し、値として NSString を持つ NSDictionary を返すことがわかりました。
NSString *urlString = @"http://dummy.url?foo=bar1&foo=bar2";
NSURL *url = [NSURL URLWithString:urlString];
NSLog(@"%@", [url respondsToSelector:@selector(queryParameters)]?@"YES":@"NO");
// YES
NSLog(@"%@", [[url performSelector:@selector(queryParameters)] debugDescription]);
// {
// foo = bar2;
// }
だから私は2つの質問があります:
- このメソッドが Apple プライベート API (またはその他のもの) に属しているかどうかは誰にもわかりませんか?
編集:このページiOS6-Private-Frameworksによると、この「queryParameters」は NSURL の文書化されていないメソッドです (ただし、場合によってはオーバーライドされた理由は説明されていません)。
- 「自分の」メソッドがこの「プライベート」メソッドによってオーバーライドされるのはなぜですか?
注意:この衝突を避けるために、私は自分のメソッドの名前を変更しました。