Конфликт категорий: метод экземпляра в категории из-за конфликтов с тем же методом из другой категории

Есть две ситуации, о которых я знаю, которые вызывают следующие ошибки:

ld: warning: instance method 'resetAudioSystem' in category from /opentok-ios-sdk/Opentok.framework/Opentok(OTPublisher+AudioSnoop.o) conflicts with same method from another category
ld: warning: instance method 'attachAudioSnoopBlock:' in category from /opentok-ios-sdk/Opentok.framework/Opentok(OTPublisher+AudioSnoop.o) conflicts with same method from another category
ld: warning: instance method 'setVideoSnoopDelegate:' in category from /opentok-ios-sdk/Opentok.framework/Opentok(OTPublisher+VideoSnoop.o) conflicts with same method from another category

Возможность 1. Метод экземпляра категории объявляется дважды. (Описано здесь: SO)

Но когда я выполняю поиск любого из трех методов экземпляра (в Xcode или Grep), я не нахожу его объявленным дважды.

Возможность 2. Случайный импорт файла .m. (Описано здесь: SO)

Но я проверил все свои импорты и импортирую фреймворк только один раз во всем проекте. Кроме того, появляется только один раз на этапах сборки.

Моя программа работает без сбоев, предположительно потому, что используется последнее добавленное определение категории, и оно оказалось правильным. (Источник)

Вопрос 1. Можно ли до добавления определить, где расположены две категории?

Вопрос 2. Есть ли какие-либо другие идеи о том, как решить эту проблему?

Примечание. Opentok Framework является двоичным

Встречается в:

хкод 4.6 и хкод 5

iOS6 и iOS7


person Emin Israfil    schedule 12.11.2013    source источник
comment
Проверьте пути поиска. Настройки сборки › Пути поиска. У меня были подобные проблемы в прошлом, и большую часть времени они сводились к пути поиска.   -  person sbarow    schedule 12.11.2013
comment
Верен ли выбранный ответ? Тот, кто проголосовал больше всего, кажется мне правильным.   -  person Benjohn    schedule 01.10.2019


Ответы (4)


Это похоже на ошибку компоновщика. Возможно, SDK был связан более одного раза, или -ObjC отсутствует/присутствует там, где его быть не должно. Проверьте флаги компоновщика. Попробуйте удалить все фреймворки OpenTok, убедитесь, что они отсутствуют в ваших проектах, затем повторно загрузите их и установите снова.

person songz    schedule 19.11.2013

У меня было это предупреждение, потому что я случайно импортировал файл реализации категории вместо файла заголовка. Так:

неправильно: #import 'MyClass+MyCategory.m'

справа: #import 'MyClass+MyCategory.h'

person martn_st    schedule 25.08.2014

У меня была эта ошибка, потому что я буквально вставил реализацию своих методов в заголовочный файл (*.h). Однако это сработало хорошо; единственный симптом - предупреждения.

Проверьте, находится ли ваша реализация в правильном (*.m) файле.

person Mateusz    schedule 22.04.2015

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

//Class_with_warnings.h:
#import "Offending_Header.h" // import #1
#import "Class_A.h"          // import #2

//Whereas Class_A.h:
#import "Offending_Header.h" // import #2
person Tibidabo    schedule 17.06.2021