2016-09-04 24 views
13

Wiem, że to trochę w stylu dupe, ale nie mam wystarczającej reputacji, aby skomentować oryginalny wpis, a gdy nie mam odpowiedzi, mam więcej przydatnych informacji (konkretny przykład). Moderatorzy, nie krępujcie się przenieść tego we właściwe miejsce.Nierozpoznany selektor UIDeviceRGBColor countByEnumeratingWithState: objects: count:

Podczas kompilowania mojego kodu przy użyciu najnowszej XCode 8 beta 6 (iOS 10 SDK), otrzymuję wyjątek „Przerwanie aplikację spowodowane nieprzechwyconego wyjątku 'NSInvalidArgumentException', powód:„- [UIDeviceRGBColor countByEnumeratingWithState: Przedmioty: Ilość:]: nierozpoznany selektor wysyłane do instancji 0x600000071340' ”

dzieje się podczas rozmowy:

auto viewController = [[[UIViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease]; 

mam izolowane problemu przez whittling dół mojego projektu do minimum, które skompilować i nadal wykazują problem. Można go pobrać tutaj:

Example project

Zauważ, że wyjąłem dużo kodu, prawie wszystkie zajęcia zostaną usunięte, co skutkuje dużo ostrzeżeń (nie błędy) dla nieistniejących klas przywoływanych z XIb. Ale to nie ma znaczenia, kod nadal kompiluje i działa dobrze z pakietem SDK iOS 9. Jednak po kompilacji z iOS 10 SDK zawiesza się zarówno w symulatorze, jak i na urządzeniach z systemem iOS 9.

Możesz obejść problem, zmieniając "#if 0" na "#if 1" w pliku " HackForUnrecognizedSelectorInIOS10.m ". Dodaje kategorię definiującą brakujące selektory dla UIColor. Ale oczywiście nie można tego dodać do kodu wysyłkowego, jest to tylko tymczasowy środek zapobiegawczy, który można dalej rozwijać.

Złożyłem zgłoszenie błędu (28153870). Ale jeśli ktoś ma więcej informacji na temat tego, jak uniknąć tego problemu bez brzydkich hacków, wszelkie informacje są mile widziane.

Dzięki

Michel Colman

Odpowiedz

39

Kiedy próbuję skompilować i uruchomić mój projekt o tej samej konfiguracji (XCode 8 beta 6, iOS 10 SDK), natknąłem się na podobny problem z tym, że mój komunikat o błędzie był następujący:

*** zakończenie aplikacji ze względu nieprzechwyconego wyjątku 'NSInvalidArgumentException' powodu: '- [długość UIDeviceRGBColor] Przełącznik nierozpoznane wysłany do przykładu 0x600000479280'

Zauważyłem, że ten problem występuje tylko wtedy, gdy widok jest inicjowany przy użyciu plików interfejsu, np. Xib i Nib. Rozwiązałem ten problem przez:

  1. Otwórz plik interfejsu, w prawym panelu przejdź do zakładki Inspektor plików.

  2. zmienić atrybut podświetlone na „iOS 7.0 i później” (lub niezależnie od wersji iOS później) enter image description here

Następnie skompilować i uruchomić projekt ponownie, powinno to rozwiązać problem, choć nie jestem pewien powód tego. Próbowałem tego samego z twoim przykładowym projektem i to rozwiązało problem.

+1

To naprawdę rozwiązuje problem! Najwyraźniej cel wdrożenia musi wynosić co najmniej 6,0. Miałem to ustawione na "Deployment Target (5.1)". Ponadto, gdy ręcznie edytowałem xib w edytorze tekstu, aby ustawić (1536 to hex 510, tj. IOS 5.1), błąd powrócił. Kiedy ustawiłem go ponownie na 1536 (hex 600, tj. IOS 6.0), znów działało OK. –

+0

O, przy okazji, w niektórych przypadkach otrzymałem również kolor [UIDeviceRGBColor]. Dlatego włączyłem oba selektory w paskudny plik hack w projekcie. W międzyczasie dowiedziałem się, że ten hack nie działa tak naprawdę: mimo że awarie znikają, tak samo dzieje się z pewną funkcjonalnością. Niektóre przyciski przestały działać, na przykład. Chociaż czasami pracowali. Wygląda na to, że dzieje się tam jakiś niedeterminizm. –

+0

To nie działa dla mnie. Próbowałem ustawić wersję "później", ale nadal dostaję błąd. Zajrzałem również do pliku i nie widziałem wersji, którą pokazał @MichelColman. Właśnie to widzę, NinjaBeetle

4

W moim przypadku potrzebowałem zmienić cel wdrożenia projektu na 8.0 w ogólnych ustawieniach produktu. Dzięki wskazówce z zaakceptowanej odpowiedzi!

+0

To zadziałało dla mnie. Ale nadal wygląda na obejście problemu. Czy istnieje uzasadnienie przyczyny i/lub poprawki? – mtb

+0

W moim przypadku musiałem określić go w Podfile. To moja wina, ponieważ Pod rejestruje ostrzeżenie, jeśli platforma nie została określona. –