当我创建NSManagedObjects时,我使用了Scalar属性。如:
@objc(Candy)
class Candy: DefaultDeserializableManagedObject {
@NSManaged var id: Int
@NSManaged var name: String
@NSManaged var smallImageUrl: String
@NSManaged var largeImageUrl: String
@NSManaged var price: Int
@NSManaged var sortOrder: Int
}
我这样做是因为我不想走第二个链接来获取可用的原语(例如self.sortOrder.intValue
)。一切都很好,我甚至可以使用SwiftyJSON和setValue:forKey:
进行反序列化,这非常好。
不幸的是,事情只适用于源存储库。在帮助其他人设置之前我没有抓住这个。即使我在与工作存储库相同的机器上重新克隆,并尝试设置它,事情也无法正常工作。在尝试获取基元的值时,我得到:
2015-01-21 10:45:48.372 [5355:178924] CoreData:错误:属性'id'是类'Candy'上的标量类型,与其Entity属性的标量类型不匹配。动态生成的访问器不支持隐式类型强制。无法为它生成getter方法。
2015-01-21 10:45:48.373 [5355:178924] - [Candy id]:无法识别的选择器发送到实例0x79ea3df0
我的.gitignore
如下,我不相信在这种情况下会有任何特定的核心数据被忽略:
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
我已经尝试重置我的模拟器用于工作存储库,并重新安装,它仍然有效。在建造之前进行清洁也是如此。
答案 0 :(得分:2)
它适用于64位设备,不适用于32位设备。
我们遇到了这个问题,在CoreData模型中,该属性设置为Int64。在Swift中,当你有:
@NSManaged var id: Int
它尝试自动转换标量。它适用于64位设备,因为它将Int64转换为Int(64位)。它在32位设备上失败,因为它无法将Int64转换为Int(32位)。
将Int更改为Int64,或将其更改为NSNumber。