簡體   English   中英

我怎樣才能從Healthkit獲得最后10天?

[英]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.

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