2012-11-29 4 views
5

をオーバーライドする可能性があります。iOs 5.1を使用してiPhone 3Gsで実行しているときに、カテゴリメソッドの1つが上書きされるこの奇妙な動作があります。NSURLの隠しメソッドqueryParametersがカテゴリ

私はこのカテゴリがあります。

@interface NSURL (queryParameters) 
    - (NSDictionary *) queryParameters; 
@end 

NSStringのキーとNSArrayの値(私のURLで同じ名前を持つ複数のパラメータ)で辞書を返します。

私が期待していたNSArray(私のURLの最後のパラメータに対応)の代わりに、NSStringをNSStringとした上で述べたデバイス以外は問題なく動作します。

は、私はダミーNSURLを構築し、それが「queryParameters」をセレクタに応答することを考え出した空のプロジェクトを作成し、値としてNSStringのでNSDictionaryのを返します。

NSString *urlString = @"http://dummy.url?foo=bar1&foo=bar2"; 
NSURL *url = [NSURL URLWithString:urlString]; 

NSLog(@"%@", [url respondsToSelector:@selector(queryParameters)][email protected]"YES":@"NO"); 
    // YES 

NSLog(@"%@", [[url performSelector:@selector(queryParameters)] debugDescription]); 
    // { 
    //  foo = bar2; 
    // } 

は、だから私は2つの質問を持っている:

  • このメソッドがApple private api(または何か他のもの)に属するかどうかは誰にも分かりますか?

EDIT:このページiOS6-Private-Frameworksによると、この「queryParametersは」NSURLの文書化されていない方法である(しかし、いくつかの場合には、それが上書きされた理由が説明されていません)。

  • 私の「独自の」メソッドは、この「プライベート」メソッドによってオーバーライドされるのはなぜですか?

備考:この衝突を回避するために、独自の方法の名前を変更しました。

+1

必要に応じて[条件付きカテゴリ](http://stackoverflow.com/questions/11950173/conditional-categories-in-mountain-lion)を使用することができます。 –

答えて

1

ここでの規約は、名前の衝突を避けるために、あなたのコントロール下にないクラスにあなたのカテゴリメソッドの接頭辞を付けることだと思います!