2012-11-29 38 views
5

ओवरराइड कर सकते हैं मेरे पास यह अजीब व्यवहार है जहां आईओएस 5.1 के साथ आईफोन 3 जी पर चलते समय मेरी श्रेणी विधियों में से एक ओवरराइड हो जाती है।NSURL छुपा विधि क्वेरी पैरामीटर श्रेणी

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

कि NSString कुंजी और NSArray मूल्यों (मेरा url में एक ही नाम के साथ एक से अधिक पैरामीटर) के साथ एक शब्दकोश रिटर्न:

मैं इस श्रेणी की है।

यह उपरोक्त वर्णित डिवाइस को छोड़कर ठीक काम करता है जहां मुझे एनएसएआरआरईआर के साथ एनएसएआरआरईआर के रूप में एनएसएआरएआरई की अपेक्षा की जाती है (मेरे यूआरएल में अंतिम पैरामीटर के अनुरूप)।

मैं एक खाली परियोजना जहाँ मैं एक डमी 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 प्रश्न हैं:

  • क्या कोई यह जानता है कि यह विधि ऐप्पल निजी एपीआई (या कुछ और) से संबंधित है या नहीं?

संपादित करें: यह पेज iOS6-Private-Frameworks के अनुसार, इस "queryParameters" NSURL के एक गैर-दस्तावेजी विधि है (लेकिन यह स्पष्ट नहीं होता कि कुछ मामले में यह ओवरराइड की गई थी)।

  • इस "निजी" विधि से मेरी "स्वयं" विधि को ओवरराइड क्यों किया जा रहा है?

टिप्पणी: मैं इस टकराव से बचने के लिए अपनी खुद की विधि का नाम बदल गया।

+1

यदि आप चाहें तो [सशर्त श्रेणियां] (http://stackoverflow.com/questions/11950173/conditional-categories-in-mountain-lion) का उपयोग कर सकते हैं। –

उत्तर

1

मुझे लगता है कि यहां पर सम्मेलन कक्षाओं पर आपकी श्रेणी विधियों को उपसर्ग करने के लिए भी है जो किसी भी नाम से बचने के लिए आपके नियंत्रण में नहीं हैं!

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^