我从我的客观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&lt; CAST(529279732.871222,&#34; NSDate&#34;)AND endDate&gt; = CAST(527983732.871222,&#34; NSDate&#34;))
为什么要打印CAST和错误的日期值? 谢谢!
答案 0 :(得分:0)
日期很简单。我已经为此here发布了更长的解释。
因此在声明中加入了一个简单的数字。它是您日期的数字表示。要将该数字视为日期,它将转换为给定类型"NSDATE"
。
答案 1 :(得分:0)
Swift 4解决方案:
在我的示例中,我使用了方便方法HKQuery.predicateForSamples
,这是一个谓词,用于开始和结束日期在指定时间间隔内的样本。
你需要阅读最后10篇
以下是从现在起10天开始约会的日期Date()
过去-10天
startDate是:Calendar.current.date(byAdding: .day, value: -10, to: Date())!
注意:您可以使用您希望下一天和前一天日期的日期,只需更改Date(
)。
endDate是:Date()
- &gt; (当前日期)
所以我的谓词看似于指定的时间间隔。
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)
希望能做到这一点。