Mam to dziwne zachowanie, gdy jedna z moich metod kategorii zostaje nadpisana podczas działania na iPhone 3G z iOs 5.1.Metoda ukryta NSURL queryParameters może zastąpić kategorię
mam tej kategorii:
@interface NSURL (queryParameters)
- (NSDictionary *) queryParameters;
@end
zwracającą słownik z kluczami i wartościami NSArray NSString (wielu parametrów z tej samej nazwie w moim URL).
Działa dobrze, z wyjątkiem wyżej wspomnianego urządzenia, gdzie otrzymuję NSDictionary z NSString jako wartości zamiast oczekiwanego NSArray (odpowiadającego ostatniemu parametrowi w moim adresie URL).
stworzyłem pusty projekt gdzie skonstruował atrapę bibliotece NSURL i zorientowali się, że reaguje na przełącznik „queryParameters”, i zwraca NSDictionary z NSString jako wartości:
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;
// }
Więc mam 2 pytania:
- Czy ktoś wie, czy ta metoda należy do Apple private api (lub cokolwiek innego)?
EDIT: Według tej stronie iOS6-Private-Frameworks, to „queryParameters” jest nieudokumentowana metoda bibliotece NSURL (ale to nie wyjaśnia, dlaczego w niektórych przypadkach było przesłonięte).
- Dlaczego moja "własna" metoda jest nadpisywana przez tę "prywatną" metodę?
Uwaga: Skończyło się na zmianie nazwy własnej metody, aby uniknąć tej kolizji.
Możesz użyć [warunkowe kategorie] (http://stackoverflow.com/questions/11950173/conditional-categories-in-mountain-lion), jeśli sobie tego życzysz. –