2017-10-09 5 views
0

나는 내 아이폰의 건강 가치를 객관적인 C 앱에서 읽고있다. 지난 10 일간의 읽기만 필요하지만이 작업을 수행하기위한 쿼리를 수행 할 수는 없습니다.헬스 키트로 지난 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 및 잘못된 날짜 값이 인쇄됩니까? 감사합니다.

+0

코드에서 인쇄 명령이나 날짜의 실제 값을 볼 수 없습니다. 따라서 인쇄가 올바른지 여부는 말하기 어렵습니다. –

답변

0

날짜는 단순한 숫자입니다. 이 here에 대한 더 긴 설명을 게시했습니다.

간단한 숫자가 문에 입력됩니다. 그것은 당신의 날짜의 숫자 표현입니다. 숫자를 날짜로 처리하려면 주어진 유형 "NSDATE"으로 형 변환됩니다. 4 솔루션

0

스위프트 : 내 예

내가 편리한 메소드 HKQuery.predicateForSamples를 사용, 이것은 시작과 종료 날짜 지정된 시간 간격 내에 샘플에 대한 술어이다.

당신은 여기에 지난 10 을 읽을 -10 일 -10 투수 일

의 startDate 지금 Date()

에서 데이트를하는 방법은해야 할 것은 : Calendar.current.date(byAdding: .day, value: -10, to: Date())!

: 다음 날짜와 이전 날짜를 원하는 날짜를 사용할 수 있습니다. 변경하려면 Date().

종료 날짜입니다 : Date() -> (현재 날짜)

그래서 내 술어가 지정된 시간 간격처럼 보인다.

let predicate = HKQuery.predicateForSamples(
        withStart: startDate.beginningOfDay(), 
        end: endDate, 
        options: [.strictStartDate,.strictEndDate]) 

u는 내가 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) 

잘하면, 트릭을 할 것입니다.

관련 문제