【发布时间】:2015-05-25 09:18:32
【问题描述】:
如何在 64 位 上存储 UIColor 到 CoreData 而不会丢失? 在 32 位上返回正确的 UIColor。
CoreData 设置
- 属性类型:可变形
- NSManagedObject 子类属性:@NSManaged var color: UIColor?
颜色值存储前
color.getRed(&red, green: &green, blue: &blue, alpha: &alpha)
输出例如64 位上的红色:
0.20000000000000018
在 32 位上输出红色
0.199999928
从CoreData检索颜色后
color.getRed(&red, green: &green, blue: &blue, alpha: &alpha)
输出例如64 位上的红色:
0.20000000298023224
在 32 位上输出红色:
0.199999928
导致的问题
使用 == 的颜色比较在 64 位上失败,因为值略有不同。在 32 位上一切正常,颜色比较成功。
【问题讨论】:
-
32 位和 64 位浮点数都不能准确存储数字
0.2。在大多数情况下,将浮点数与==进行比较是不好的。 -
已尝试将颜色值保存为十六进制,以完全避免精度问题。
-
你是如何归档 UIColor 的?用 float / double 做 == 绝不是一个聪明的主意!查看stackoverflow.com/questions/1275662/…
标签: swift core-data nsdata uicolor transformable