【问题标题】:Xcode error: Semantic Issue, Property 'className' not found on object type 'GKEntity *'Xcode 错误:语义问题,在对象类型“GKEntity *”上找不到属性“className”
【发布时间】:2017-07-20 19:41:39
【问题描述】:

最近我开始从 Xcode 收到此错误:

Error Screenshot

这个 'className' 属性属于 NSObject。 Here is the official documentation.

为什么会发生这种情况,我该如何解决这个问题(不避免使用此属性)


奇怪的是,几天前完全相同的代码在 macOS 和 iOS 目标上运行良好。然后它在构建成功完成后开始显示此错误(我可以很好地运行该项目),但现在 iOS 目标甚至不会构建......

我尝试 (1) 多次清除我的 derivedData 文件夹,(4) 进行干净的检查,(3) 重新启动 Xcode,(2) 重新启动系统,所有这些都以正确的顺序进行,但没有成功...

我在 macOS 10.12.3 上使用 Xcode 版本 8.2.1,我的部署目标是 iOS 10.2 和 macOS 10.12。

【问题讨论】:

  • 您是否在项目中和文件顶部导入了gameKit?
  • 我不知道为什么它以前可以工作,但它应该在 iOS 上工作。如果您查看该属性仅在 macOS 上可用的文档。
  • 我确实导入了 GamePlayKit,但@JamesP 你是对的,我什至没有注意到这一点。卧槽!

标签: ios objective-c xcode compiler-errors gameplay-kit


【解决方案1】:

一个简洁的小扩展应该可以解决问题。

public extension NSObject {

    var nameOfClass: String {
        String(describing: type(of: self))
    }
}

【讨论】:

    【解决方案2】:

    正如@JamesP 在上面的评论中指出的那样,className 属性被明确记录为仅存在于 macOS 10.0+ 上,而不存在于 iOS 上,我没有注意到...

    这意味着我的问题来自于我在开发过程中将实现的目标设置从仅 macOS 更改为 macOS 和 iOS。

    因为我使用的是 Objective-C,所以我最终将 entity.className 替换为

    NSStringFromClass([entity class])
    

    @Russel 的回答展示了如何在 Swift 中解决这个问题。

    【讨论】:

      【解决方案3】:

      我找不到任何关于为什么此属性已被删除的解释,但似乎确实如此!

      确实找到了解决方案,Get class name of object as string in Swift

      String(describing: type(of: self))
      

      【讨论】:

        猜你喜欢
        • 2018-01-25
        • 2013-11-24
        • 2012-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-31
        • 1970-01-01
        • 2014-04-27
        相关资源
        最近更新 更多