2017-10-09 10 views
0

私は私のiPhoneの健康価値を目的の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")AND endDate> = CAST(527983732.871222、 "NSDate") )

なぜCASTと間違った日付の値が印刷されますか? ありがとう!

+0

あなたのコードには印刷コマンドも日付の実際の値も表示されません。したがって、プリントアウトが正しいかどうかは言うまでもありません。 –

答えて

0

日付は単純な数値です。私はこのhereの説明を掲載しました。

したがって、単純な数値がステートメントに入れられます。それはあなたの日付の数値表現です。数値を日付として扱うには、指定された型"NSDATE"にキャストされます。

0

スウィフト4溶液:私の例では

私は便利なメソッドHKQuery.predicateForSamplesを使用し、これは、開始日と終了日を指定した時間間隔内に落下したサンプルのための述語です。

あなたはここで最後の10 を読ん-10日間-10透水性日間

たstartDate今Date()

から日付を取得する方法を示しますする必要があることである:Calendar.current.date(byAdding: .day, value: -10, to: Date())!

:あなたは翌日と昨日の日付を使用することができます、ちょうどDate(を変更します)。

endDateには、次のとおりです。Date() - >(現在の日付)

だから私の述語は、指定した時間間隔でのように見えます。

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

私はこれは私が午前0時

beginningOfDay()方法の説明から日付を開始することができますbeginningOfDay()メソッドを追加しているuは私の述語で見ることができるよう:

func beginningOfDay() -> Date { 
     let beginningOfDay = Calendar.current.startOfDay(for: self) 
     return beginningOfDay 
    } 

あなたをheathkitDocに記述されているものと同等の述部を作成する述部フォーマット文字列を作成することもできます。

let explicitTimeInterval = NSPredicate(format: "%K >= %@ AND %K < %@", 
             HKPredicateKeyPathEndDate, myStartDate, 
             HKPredicateKeyPathStartDate, myEndDate) 

うまくいけば、トリックを行います。

関連する問題