"Переопределение 'Category' как другого вида символа" и конфликт с именами классов среды выполнения Objc

StackOverflow https://stackoverflow.com/questions/20353408

  •  25-08-2022
  •  | 
  •  

Вопрос

У меня есть класс на Objective-C:

@interface Category : NSObject
{
// ...
}

Все было хорошо и Я использовал этот класс без проблем в 3 разных проектах.

Однажды я решил создать тестовую цель для одного проекта.Затем произошла странная вещь:компилятор отказывается компилироваться с этой ошибкой:

Redefenition of 'Category' as a different kind of symbol

это также указывало на runtime.h с

typedef struct objc_category *Category;

Что ж, это разумно.

Однако я не могу понять, почему это позволило мне использовать этот класс раньше и в чем разница между исходной целью и тестовой целью.Я проверил Deploy target, iOS SDK, все макросы, пути к заголовкам, #import <objc/runtime.h> и классы в обеих целях - это почти одно и то же.

Я не хочу рефакторинговать имя этого класса из-за использования его в нескольких проектах, так в чем же может быть причина такого поведения?

Это было полезно?

Решение

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

Вполне вероятно, что вы импортируете файл, который импортирует <objc/runtime.h> в какой-то момент.Что касается того, в чем разница между тестовой целью и обычной целью, то в Xcode тестирование работает путем введения символов в пакет.Могут быть некоторые различия в удалении кода и видимости символов, которые могут объяснить такого рода ошибки.

Неудивительно Apple рекомендует добавлять к классам префиксы из 2 или 3 букв

Другие советы

Хотя вы должны делать то, что говорит @olotiar в своем ответе, есть быстрое решение.

Перейти к своему проекту Настройки сборки, ищи "Включить модули (C и объектив-C)"И установить значение на НЕТ.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top