[英]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
}
我試圖用谷歌搜索,但是什么都沒有出現。 也許我問錯了問題。 有誰知道為什么會這樣,以及我如何確保這些值保持兩倍? (您可能會注意到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.