CoreData Fetch 从 Double 创建 String

CoreData Fetch creates String from Double

我正在查询 HealthKit 并将条目保存到 CoreData:这是我的获取请求:

func queryCoreDataData () -> NSArray {
var context = (UIApplication.sharedApplication().delegate as AppDelegate).managedObjectContext!

var request = NSFetchRequest(entityName: "HKActiveEnergyBurned")
request.returnsObjectsAsFaults = false
var hkActiveEnergyBurned = context.executeFetchRequest(request, error: nil)! as [HKActiveEnergyBurned]
var activeEnergyBurnedData = (hkActiveEnergyBurned as NSArray).valueForKey("activeEnergyBurned_data") as NSArray  
println("CoreData Fetch activeEnergyBurnedData: \(activeEnergyBurnedData)")

return activeEnergyBurnedData
}

我将每个条目打印到控制台。控制台显示:

Saving to CoreData:
CD save activeEnergyBurned: 740.0
CD save activeEnergyBurned: 725.0
CD save activeEnergyBurned: 4.0
CD save activeEnergyBurned: 152.0
CD save activeEnergyBurned: 459.0

当我稍后获取数据时,一些条目已经变成了字符串!

CoreData Fetch activeEnergyBurnedData: (
"739.9999999999999",
    725,
    4,
    152,
    "459.0000000000001"
)

这是我的 CoreData 模型的图片

和 NSManaged 对象:

import Foundation
import CoreData

class HKActiveEnergyBurned: NSManagedObject {

    @NSManaged var activeEnergyBurned_data: NSNumber
    @NSManaged var activeEnergyBurned_date: NSDate

}

我试过 google 这个,但没有任何结果。也许我问错了问题。 有谁知道为什么会发生这种情况以及我如何确保值保持双倍?(您可能会注意到 NSManaged 对象以 NSNumber 出现,我也不确定为什么会发生这种情况). 任何帮助将不胜感激。谢谢!

activeEnergyBurned_data 的类型是 NSNumber 但是当您打印它以控制台时 description 方法被调用。需要此方法来提供对象的文本表示。这就是为什么您会看到用引号引起来的数字。此方法继承自 NSObject 协议,因此任何对象都有机会为调试或日志记录等提供文本表示。

当您的数字包含小数点时,打印出来时用引号括起来,但它们仍然存储为数字。您可以简单地重现:

let array = [ 739.9, 725 ] as NSArray
println("\(array)")

输出:

(
    "739.9",
    725
)

字符串插值使用 description 方法(在本例中),这正是 -[NSArray description] 的工作方式。这不是错误。如果您不喜欢它,则必须“手动”将数组转换为字符串,而不是依赖 description.