Xcode错误:语义问题,对象类型'GKEntity *'

时间:2017-03-01 12:58:05

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

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

Error Screenshot

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

为什么会发生这种情况?如何解决?(不要避免使用此属性)

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

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

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

3 个答案:

答案 0 :(得分:1)

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

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

const prop_info *pi;
pi = __system_property_find("ro.serialno");
if (pi == 0) {
// We've got a problem
}

答案 1 :(得分:1)

正如@JamesP在上面的评论中指出的那样,className属性清楚地记录在macOS 10.0+上,而不是在iOS上,我没注意到......

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

因为我正在使用Objective-C,所以我最终用

替换了entity.className
NSStringFromClass([entity class])

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

答案 2 :(得分:0)

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

public extension NSObject {

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