当我创建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: error: Property ‘id’ is a scalar type on class ‘Candy’ that does not match its Entity’s property’s scalar type. Dynamically generated accessors do not support implicit type coercion. Cannot generate a getter method for it.
2015-01-21 10:45:48.373 [5355:178924] -[Candy id]: unrecognized selector sent to instance 0x79ea3df0
我的.gitignore如下,我不相信在这种情况下会有任何特定的核心数据被忽略:
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
我已经尝试重置我的模拟器用于工作存储库,并重新安装,它仍然有效.建筑前清洁也一样.
最佳答案 它适用于64位设备,不适用于32位设备.
我们遇到了这个问题,在CoreData模型中,该属性设置为Int64.在Swift中,当你有:
@NSManaged var id: Int
它试图自动转换标量.它适用于64位设备,因为它将Int64转换为Int(64位).它在32位设备上失败,因为它无法将Int64转换为Int(32位).
将Int更改为Int64,或将其更改为NSNumber.