Pracuję nad projektem, który został pierwotnie zbudowany w XCode 4.0, a następnie został zmigrowany do XCode 4.2. Teraz mam przetestowane migracji do XCode 4.5, a ja dostaję mnóstwo ostrzeżeń jak poniżej ...Kod XCode 4.5 ostrzega o konfliktach nazw metod między kategoriami dla klas nadrzędnych/potomnych
instance method 'values' in category from <pathToTheFile>/HistoryObject+extras.o conflicts with same method from another category
Te ostrzeżenia nigdy nie pojawiły się w poprzednich wersjach XCode, a kod nie został zmieniony.
Projekt jest ustawiony na iOS 4.3 dla celu wdrożenia.
Mamy więc od poprzedniego autora kilka klas typów DAO, które moim zdaniem zostały wygenerowane automatycznie z CoreData, a następnie każda z tych klas ma kategorię, która rozszerza ją o wdrożenie pewnych metod. Podam przykład ...
Mamy klasę podstawową o nazwie LisaObject, która dziedziczy z NSManagedObject, i ma kategorię o nazwie LisaObject + dodatki. W LisaObject + dodatki istnieje metoda o nazwie "values", która zwraca NSMutableDictionary.
Następnie mamy klasę o nazwie HistoryObject, która dziedziczy po LisaObject. Istnieje również Kategoria dla obiektu HistoryObject o nazwie HistroyObject + dodatki. Ta kategoria ma również metodę o nazwie "wartości". W metodzie ValueObject + extras values wywołuje [super wartości], a następnie sprawdza pewne warunki i ustawia dodatkowe wartości w słowniku, które nie są ustawione w metodzie klasy podstawowej.
Mamy wtedy klasę o nazwie LessonStatusObject, która dziedziczy z obiektu HistoryObject, a także ma kategorię o nazwie LessonStatusObject + dodatki, która ma metodę o nazwie wartości. Ta metoda wartości wywołuje również [super wartości], a następnie wykonuje dodatkowe prace nad zwróconym słownikiem.
Dla każdej z tych metod "wartości", otrzymujemy ostrzeżenie w czasie kompilacji, takie jak pokazane powyżej, gdzie jest napisane, że kategoria ma metodę o sprzecznej nazwie.
Mam kilka pytań na ten temat.
Po pierwsze, czy to wdrożenie może spowodować jakiekolwiek uzasadnione problemy, czy te ostrzeżenia są ogólnie łagodne? Próbowałem zastanowić się, w jaki sposób ta implementacja może spowodować niejednoznaczność w czasie wykonywania, ale nie widzę, jak to się mogło stać.
Po drugie, czy jest coś, co powinienem zrobić, aby naprawić te ostrzeżenia (i nie chodzi mi tylko o to, żeby przestały się pojawiać, mam na myśli naprawę przyczyny)? Czy jest jakiś inny sposób, w jaki powinniśmy tego dokonać?
Ponadto, dlaczego XCode 4.2 nie ostrzegałby o tym, ale XCode 4.5 ostrzega?
Czy nie rozumiem czegoś o kategoriach? Chodzi mi o to, że jeśli metoda "wartości" byłaby faktycznie częścią implementacji każdej klasy, nie byłoby problemu z zastąpieniem ich tak, jak robimy, ale kompilator wydaje się narzekać tylko dlatego, że są to Kategorie. Czy jest w tym coś niebezpiecznego?
Każda rada jest doceniana.
EDIT: Wystarczy, aby dostarczyć więcej informacji ... Kiedy byliśmy przy użyciu XCode 4.2, projekt miał kompilatora LLVM zestaw do Apple Compiler 3.0. Teraz, kiedy otwieram projekt w XCode 4.5, ma on kompilator ustawiony na Apple LLVM Compiler 4.1.
Proszę się nauczyć odróżniać IDE (Xcode) od kompilatora (Clang, zakładam). Kompilator podaje ci ostrzeżenia, a nie Xcode. Xcode to tylko frontowy koniec. –