"다른 종류의 상징으로서 '카테고리'의 재정의 및 OBJC 런타임 클래스 이름과 충돌

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

  •  25-08-2022
  •  | 
  •  

문제

객관적인 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 및 Objective-C)"그리고 가치를 설정하십시오 아니.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top