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

时间:2015-01-21 15:57:22

标签: ios xcode swift

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

我已经尝试重置我的模拟器用于工作存储库,并重新安装,它仍然有效。在建造之前进行清洁也是如此。

1 个答案:

答案 0 :(得分:2)

它适用于64位设备,不适用于32位设备。

我们遇到了这个问题,在CoreData模型中,该属性设置为Int64。在Swift中,当你有:

@NSManaged var id: Int

它尝试自动转换标量。它适用于64位设备,因为它将Int64转换为Int(64位)。它在32位设备上失败,因为它无法将Int64转换为Int(32位)。

将Int更改为Int64,或将其更改为NSNumber。