ios – 标量属性在源存储库中不起作用

当我创建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.

点赞