Xcode 8 Objective-C 카테고리 경고
Xcode 8과 Swift 3.0을 사용하고 있습니다. 이 오류 메시지는 무엇을 의미합니까?
ld : 경고 : 일부 개체 파일에는 호환되지 않는 Objective-C 범주 정의가 있습니다. 일부 카테고리 메타 데이터가 손실 될 수 있습니다. Objective-C 카테고리를 포함하는 모든 파일은 동일한 컴파일러를 사용하여 빌드해야합니다.
또한 UIColor
확장 에서이 문제가 발생했습니다. 내 앱은 Objective-c를 사용하는 일부 프레임 워크를 제외하고 전적으로 신속하게 만들어 졌으므로 다음 var
과 같이 선언하는 데 문제가 없습니다 @nonobjc
.
extension UIColor {
@nonobjc static var lol: UIColor {
return UIColor.red
}
}
애플 문서에서 :
nonobjc 속성은 Objective-C 코드에서 선언을 사용할 수 없도록 컴파일러에 지시합니다.
이 코드는 Objective-C에서 사용할 수 없기 때문에 경고가 사라집니다.
제 경우에는 확장에서 유형 속성을 계산 한 이유가 있습니다.
extension NSParagraphStyle {
class var defaultStyle: NSParagraphStyle {
return ...
}
}
정확한 이유는 확실하지 않지만 경고를 없애기 위해 계산 된 유형 속성 ( class var
)을 유형 메서드 ( class func
) 로 변환해야했습니다 .
extension NSParagraphStyle {
class func defaultStyle() -> NSParagraphStyle {
return ...
}
}
이 경고는 내 응용 프로그램에 Objective-C를 사용하는 프레임 워크를 추가 한 후 내 프로젝트에 나타났습니다.
이 경고가 사라질 때 모든 확장 에서 모든 정적 함수와 정적 변수 를 선언 합니다 .@nonobjc
예를 들면
extension Notification.Name {
@nonobjc static let MyNotificationName = Notification.Name("NNSongFavoriteStatusDidChangeNotification")
}
또는
extension UIColor {
@nonobjc static let superGiantRed = UIColor(red: 180.0/255.0, green: 40.0/255.0, blue: 27.0/255.0, alpha: 1.0)
}
Google Analytics 포드
에서 빌드 설정 -> 기타 링커 플래그는 당신이있는 경우에 -ObjC을 에 -l "Google 웹" 이 경고가 나타납니다 플래그. 이유와 해결 방법은 모르겠지만 문제가 될 수도 있습니다.
제 경우에는 클래스 변수였습니다.
public extension NSObject {
public class var nameOfClass: String{
return NSStringFromClass(self).components(separatedBy: ".").last!
}
@nonobjc 추가가 도움이되었습니다.
나에게 문제는 Xcode 8로 구축 된 Swift 3 애플리케이션에서 Xcode 7로 구축 된 공급 업체의 타사 프레임 워크를 사용하고 있었다는 것입니다. 프레임 워크는 컴파일 된 바이너리이기 때문에 공급 업체에 요청하는 것이 유일한 옵션이었습니다. 최신 버전의 Xcode로 구축 된 새로운 프레임 워크.
" class var "을 " class func "로 변경했을 때 문제를 해결할 수있었습니다 .
거기에 :
class var applicationVersionNumber: String {
if let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String {
return version
}
return "Version Number Not Available"
}
되었습니다 :
class func applicationVersionNumber() -> String {
if let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String {
return version
}
return "Version Number Not Available"
}
출처 : https://forums.developer.apple.com/message/146579#146579
각 구성원을 @nonobjc
개별적으로 표시하는 대신 전체 확장을 @nonobjc
다음 과 같이 표시 할 수 있습니다 .
@nonobjc extension UIStoryboard {
static let main = UIStoryboard(name: "Main", bundle: nil)
static let welcome = UIStoryboard(name: "Main", bundle: nil)
}
참고 URL : https://stackoverflow.com/questions/39665979/xcode-8-objective-c-category-warning
'program tip' 카테고리의 다른 글
정규식에서 \ ^ $.? * | + () [{와 같은 특수 문자를 어떻게 처리합니까? (0) | 2020.12.05 |
---|---|
최소 Aurelia 프로젝트를 처음부터 설정하는 방법 (0) | 2020.12.05 |
Oracle에서 숫자에 대한 기본 정밀도 및 스케일은 무엇입니까? (0) | 2020.12.05 |
STL 컨테이너의 끝 반복자와 동일한 반복기를 증가 시키면 어떻게 되나요? (0) | 2020.12.05 |
클라이언트 측 웹 개발에 Python을 사용할 수 있습니까? (0) | 2020.12.05 |