Подтвердить что ты не робот

Unrecognized selector UIDeviceRGBColor countByEnumeratingWithState: objects: count:

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

При компиляции моего кода с использованием последней версии XCode 8 beta 6 (iOS 10 SDK) я получаю исключение "Завершение приложения из-за неперехваченного исключения" NSInvalidArgumentException ", причина: '- [UIDeviceRGBColor countByEnumeratingWithState: objects: count:]: unrecognized селектор отправлен в экземпляр 0x600000071340 '"

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

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

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

Пример проекта

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

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

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

Спасибо

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

4b9b3361

Ответ 1

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

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

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

  • Откройте файл интерфейса на правой панели, перейдите на вкладку "Инспектор файлов".

  • Измените атрибут, выделенный для "iOS 7.0 и более поздних версий" (или любой другой версии iOS позже) введите описание изображения здесь

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

Ответ 2

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