2016-09-04 6 views
13

Я знаю, что это своего рода обман, но у меня пока нет достаточной репутации, чтобы прокомментировать исходное сообщение, и, хотя у меня нет ответа, у меня есть более полезная информация (конкретный пример). Модераторы, не стесняйтесь переместить это в нужное место.Unrecognized selector UIDeviceRGBColor countByEnumeratingWithState: objects: count:

При компиляции моего кода с использованием новейшего XCode 8 беты-6 (IOS 10 SDK), я получаю исключение «Нагрузочное приложение из-за неперехваченное исключение 'NSInvalidArgumentException', причина:«- [UIDeviceRGBColor countByEnumeratingWithState: объекты: Кол-во:]: непризнанный селектор послал к экземпляру 0x600000071340' »

Это происходит во время разговора:

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

Я изолировал проблему сводила вниз мой проект до минимума, который будет компилировать и до сих пор проявляет проблему. Вы можете скачать его здесь:

Example project

Обратите внимание, что я вынул много кода, почти все классы исчезли, что приводит к большому количеству предупреждений (а не ошибки) для несуществующих классов ссылочных от XIb. Но это не имеет значения, код все еще компилируется и отлично работает с iOS 9 SDK. Однако после компиляции с iOS 10 sdk он сбой как в симуляторе, так и на устройствах под управлением iOS 9.

Вы можете решить проблему, изменив «#if 0» на «#if 1» в файле " HackForUnrecognizedSelectorInIOS10.m». Это добавляет категорию, определяющую отсутствующие селекторы для UIColor. Но, очевидно, вы не можете добавить это в код доставки, это просто временная мера остановки, чтобы продолжать развиваться.

Я подал сообщение об ошибке (28153870). Но если у кого-то есть больше информации о том, как избежать этой проблемы без уродливых хаков, любая информация приветствуется.

Благодаря

Мишель Колман

ответ

39

Когда я пытаюсь скомпилировать и запустить свой проект с такой же конфигурацией (XCode 8 бета-6, IOS 10 SDK), я столкнулся с аналогичной проблемой, за исключением того, что мое сообщение об ошибке был:

*** Согласующего приложение из-за неперехваченное исключение 'NSInvalidArgumentException', причина: '- [длина UIDeviceRGBColor]: непризнанный селектор послал к экземпляру 0x600000479280'

И я заметил, что эта проблема возникает только тогда, когда представление является init с использованием файлов интерфейса, то есть Xib и Nib. Я решил этот вопрос:

  1. Открыть файл интерфейса, на правой панели, перейти на вкладку «Инспектор файлов».

  2. Изменить атрибут подсвечена «прошивкой 7.0 и более поздние версии» (или любой другой IOS версии позже) enter image description here

Затем скомпилировать и запустить свой проект еще раз, это должно решить проблему, хотя я не конечно, о причине этого. Я попробовал то же самое с вашим типовым проектом, и он также решает проблему.

+1

Это действительно решение! По-видимому, цель развертывания должна быть не менее 6,0. У меня было установлено значение «Цель развертывания (5.1)». Кроме того, когда я вручную редактировал xib в текстовом редакторе, чтобы установить (1536 - это hex 510, то есть iOS 5.1), ошибка вернулась. Когда я верну его обратно к 1536 (hex 600, то есть iOS 6.0), он снова работал нормально. –

+0

O, кстати, у меня также была [UIDeviceRGBColor length] в некоторых случаях. Вот почему я включил оба селектора в уродливый файл взлома в проекте. Тем временем я узнал, что этот хак на самом деле не работает правильно: даже несмотря на то, что сбои исчезают, так же как и некоторые функции. Например, некоторые кнопки перестали работать. Хотя иногда они работали. Там, кажется, есть некоторый недетерминизм. –

+0

Это не сработало для меня. Я попытался установить версию «Позже», но до сих пор получаю ошибку. Я также просмотрел файл, и я не вижу версию, которую показал @MichelColman. Я просто вижу это, <идентификатор развертывания = "iOS" /> – NinjaBeetle

4

В моем случае мне нужно было изменить цель развертывания проекта до 8.0 в общих настройках продукта. Благодаря намеку на принятый ответ!

+0

Это сработало для меня. Но это по-прежнему кажется обходным путем. Есть ли объяснение в любом месте причины и/или исправление? – mtb

+0

В моем случае я должен был указать его в подфайле. Это моя ошибка, потому что Pod регистрирует предупреждение, если платформа не указана. –