![](/img/trans.png)
[英]Get bodyMass data from last 30 days from HealthKit with Swift
[英]How can I get last 10 days from healthkit?
我正在從目標c應用程序讀取iPhone的健康值。 我只需要閱讀最近的10天,但是我無法進行查詢。
我正在嘗試使用以下代碼將謂詞添加到謂詞中:
NSPredicate *explicitforDay =
[NSPredicate predicateWithFormat:@"%K >= %@ AND %K <= %@",
HKPredicateKeyPathDateComponents, startDateComponents,
HKPredicateKeyPathDateComponents, endDateComponents];
然后我嘗試了這個:
NSPredicate *explicitforDay = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"%@ < %%@ AND %@ >= %%@", HKPredicateKeyPathStartDate
, HKPredicateKeyPathEndDate], myFirstDate, myEndDate];
但是在輸出中,我可以看到類似以下內容:
(startDate <CAST(529279732.871222,“ NSDate”)和endDate> = CAST(527983732.871222,“ NSDate”))
為什么要打印CAST和錯誤的日期值? 謝謝!
日期是一個簡單的數字。 我在這里為此發布了更長的解釋。
因此,將簡單數字放入語句中。 它是您的日期的數字表示。 要將數字視為日期,將其"NSDATE"
轉換為給定類型"NSDATE"
。
Swift 4解決方案:
在我的示例中,我使用便捷方法HKQuery.predicateForSamples
,這是開始和結束日期在指定時間間隔內的樣本的謂詞。
您需要閱讀最近的10條信息這是如何從現在起-10天Date()
連續-10天
startDate是: Calendar.current.date(byAdding: .day, value: -10, to: Date())!
注意 :您可以使用要作為前一天和下一天日期的日期,只需更改Date(
)。
endDate是: Date()
->(當前日期)
所以我的謂詞看起來像具有指定的時間間隔。
let predicate = HKQuery.predicateForSamples(
withStart: startDate.beginningOfDay(),
end: endDate,
options: [.strictStartDate,.strictEndDate])
正如您在謂詞中看到的那樣,我正在添加beginningOfDay()
方法,這將允許我從00:00開始日期
beginningOfDay()
方法說明:
func beginningOfDay() -> Date {
let beginningOfDay = Calendar.current.startOfDay(for: self)
return beginningOfDay
}
您還可以創建謂詞格式字符串,以創建heathkitDoc中描述的等效謂詞。
let explicitTimeInterval = NSPredicate(format: "%K >= %@ AND %K < %@",
HKPredicateKeyPathEndDate, myStartDate,
HKPredicateKeyPathStartDate, myEndDate)
希望會成功。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.