簡體   English   中英

CoreData Fetch從Double創建字符串

[英]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模型的圖片

CoreData模型

和NSManaged對象:

import Foundation
import CoreData

class HKActiveEnergyBurned: NSManagedObject {

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

}

我試圖用谷歌搜索,但是什么都沒有出現。 也許我問錯了問題。 有誰知道為什么會這樣,以及我如何確保這些值保持兩倍? (您可能會注意到NSManaged Object以NSNumber出現,我也不知道為什么會這樣)。 任何幫助將不勝感激。 謝謝 !

activeEnergyBurned_data的類型為NSNumber但是當您將其打印為控制台時,將調用description方法。 需要此方法來提供對象的文本表示。 所以這就是為什么您看到數字都用引號引起來。 此方法繼承自NSObject協議,因此任何對象都有機會提供用於調試或記錄等的文本表示形式。

當您的數字包含小數點時,會用引號引起來,但它們仍會存儲為數字。 您可以輕松地重現此內容:

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

輸出:

(
    "739.9",
    725
)

字符串插值使用description方法(在這種情況下),這就是-[NSArray description]工作方式。 這不是錯誤。 如果您不喜歡它,則必須“手動”將數組轉換為字符串,而不要依賴description

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM