2012-04-03 15 views
8

Dostaję ostrzeżenie przedmiot na następującej linii:Ostrzeżenie: Niezaimplementowane Selector localizedCaseInsensitiveCompare

NSSortDescriptor * sort = [ [NSSortDescriptor alloc] initWithKey:@"name" 
           ascending:YES 
            selector:@selector(localizedCaseInsensitiveCompare:) ]; 

I nie zawsze się to ostrzeżenie. Oznacza to, że ostrzeżenie pojawiło się niedawno, prawdopodobnie z powodu zmiany ustawień kompilacji. Tutaj nie widzę literówki. To wygląda (jak dla mnie) tak, jak kod, który widziałem w wielu przykładach. Nie widzę wyjątku czasu wykonywania. Ale nie lubię ostrzeżeń. Ktoś to widział? Masz pomysł, co go uruchamia?

Odpowiedz

14

Czy włączono -Wselector? (Zwane także "Typami wielokrotnego wyboru dla selektora".) To ostrzeżenie jest niezgodne z programem Foundation i nie powinieneś go włączać. Istnieje, ponieważ ma sens w "czystym" Objective-C. Po prostu nie w żadnym Celu C, jaki kiedykolwiek byłby prawdopodobny do napisania (tj. Wszystkiego, co używa kakao).

Wymagane ostrzeżenie to -Wundeclared-selector, zwane również "niezadeklarowanym selektorem".

Jest nieco przestarzały, ale opracowałem kompletną listę ostrzeżeń GCC i informacji, czy je włączać czy wyłączać w moim pliku Shared.xcconfig. Istnieje również wersja very helpful bestiary compiled by Jean-David Gadina, która jest nieco bardziej aktualna.

+0

To się udało. Dzięki. – DRVic

+0

Hi @Rob Napier, Właśnie zaktualizowałem xcode 5 i otrzymuję ostrzeżenie "Selector not found", Jak zasugerowałeś, zaznaczyłem opcję "Multiple Definition Types for Selector", a jej już ustawiono na NO. Ale wciąż dostaję ostrzeżenie. Więc co robić. – Ranjit

+0

To inne ostrzeżenie niż to pytanie. Jeśli otrzymujesz to ostrzeżenie po aktualizacji, sugeruje to, że używasz metody, która została usunięta. Powinieneś otworzyć nowe pytanie ze szczegółami, jakiej metody używasz, jakiego SDK używasz i dokładnym ostrzeżeniem (chociaż zacznę od sprawdzenia, czy ta metoda rzeczywiście istnieje). –