CoreData Fetch从Double创建String

时间:2015-02-27 18:45:04

标签: ios core-data

我正在查询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模型的图片

CoreData Model

和NSManaged对象:

import Foundation
import CoreData

class HKActiveEnergyBurned: NSManagedObject {

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

}

我试图谷歌这个,但没有出现。也许我在问错误的问题。 有谁知道为什么会发生这种情况以及如何确保值保持为双倍?(您可能会注意到NSManaged Object出现为NSNumber,我不知道为什么会发生这种情况)。  任何帮助将非常感谢。谢谢!

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

当您的数字包含小数点时,它们会被引号括起来,但它们仍然存储为数字。你可以轻松地重现这个:

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

输出:

(
    "739.9",
    725
)

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