我一直在测试主要使用iPhone 6,6 plus和iPad。刚刚在iPhone 5模拟器上尝试了我的应用程序,并收到了Core Data错误。
CoreData:error:属性'setId:'是类'AppName.EntityName'上的标量类型,与其Entity属性的标量类型不匹配。动态生成的访问器不支持隐式类型强制。无法为它生成setter方法
现在,我的应用程序中没有'setId'对象,但当然实体确实有一个'ID'对象,它被设置为int。
class Entity: NSManagedObject {
@NSManaged var id: Int
}
在Core Data模型中,属性类型设置为Integer64。这可能是我的问题,因为我在不知道什么是最好的情况下选择了它。我在模型和类中有其他属性,但它们都是字符串。
寻找修复和解释,为什么只在某些设备上发生这种情况,所以我可以学习!
答案 0 :(得分:31)
如果Core Data类型是Integer 64,那么您应该将该属性声明为Int64
(或者让Xcode创建托管对象子类)。
Int
可以是32位或64位,具体取决于处理器架构。
或者,将属性定义为NSNumber*
而不是标量属性。当然,您必须注意在32位平台上,值不超过Int
的范围。
答案 1 :(得分:1)
或者,您可以编写自己的setter / getter方法,将Int
转换为NSNumber
实例,并将其传递给原始值。 E.g:
private(set) var publicId: Int {
get {
self.willAccessValueForKey("publicId")
let value = self.primitivePublicId.longValue
self.didAccessValueForKey("publicId")
return value
}
set {
self.willChangeValueForKey("publicId")
self.primitivePublicId = NSNumber(long: newValue)
self.didChangeValueForKey("publicId")
}
}
@NSManaged private var primitivePublicId: NSNumber
答案 2 :(得分:0)
别忘了尝试“清洁”!即使我已从设备中删除了该应用程序,也为我修复了该问题。