2012-04-03 10 views
8

ich das Thema Warnung auf der folgenden Zeile bekommen:Achtung: Nicht implementierte Selector localizedCaseInsensitiveCompare

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

Und ich habe nicht immer diese Warnung. Das heißt, die Warnung wurde erst kürzlich angezeigt, möglicherweise aufgrund einer Änderung der Kompilierungseinstellungen. Ich sehe hier keinen Tippfehler. Das sieht (für mich) genauso aus wie Code, den ich in vielen Beispielen gesehen habe. Ich sehe keine Laufzeitausnahme. Aber ich mag keine Warnungen. Wer hat das gesehen? Irgendeine Idee, was es auslöst?

Antwort

14

Haben Sie -Wselector eingeschaltet? (Auch "Mehrere Definitionsarten für Selektor" genannt.) Diese Warnung ist nicht kompatibel mit Foundation und sollte nicht aktiviert werden. Es existiert, weil es im "reinen" Objective-C Sinn macht. Einfach nicht in irgendeinem Objective-C, das du wahrscheinlich jemals schreiben würdest (also alles, was Cocoa verwendet). Die gewünschte Warnung lautet -Wundeclared-selector, auch "Undeclared Selector" genannt.

Es ist etwas altmodisch, aber ich habe eine vollständige Liste der GCC-Warnungen zusammengestellt und ob sie in meiner Shared.xcconfig Datei ein- oder auszuschalten sind. Es gibt auch eine very helpful bestiary compiled by Jean-David Gadina, die etwas aktueller ist.

+0

Das hat es getan. Vielen Dank. – DRVic

+0

Hallo @Rob Napier, ich habe gerade aktualisiert auf xcode 5 und ich bekomme die Warnung "Selektor nicht gefunden", Wie Sie vorgeschlagen, ich habe die Option "Mehrere Definitionstypen für Selektor", und seine bereits auf NEIN gesetzt. Trotzdem bekomme ich die Warnung. Also was zu tun ist. – Ranjit

+0

Das ist eine andere Warnung als diese Frage ist. Wenn Sie nach dem Upgrade diese Warnung erhalten, deutet dies darauf hin, dass Sie eine Methode verwenden, die entfernt wurde. Sie sollten eine neue Frage mit Details zu der von Ihnen verwendeten Methode, dem von Ihnen verwendeten SDK und der genauen Warnung öffnen (obwohl ich zunächst nur überprüfen würde, ob die Methode tatsächlich existiert). –