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