2017-03-14 16 views
1

今年1月のHealth Appに保存されている今年の心拍数の記録は2つあります。私が作っている現在のアプリでは、心拍数のデータを読み書きするためのアクセス権を与えています。トラブルHealthKitからの心拍数データの取得

私のビューのコントローラの1つで、私のviewDidAppearに、私は心拍数の記録を読み込もうとしています。しかし、私はすべてのデータの取得に失敗しています。ここで

は私の読み取り心拍数データコードです:

+ (void)readHeartRateWithCompletion:(void (^)(NSArray *results, NSError *error))completion { 

    HKQuantityType *heartRateType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate]; 

    NSSortDescriptor *timeSortDescriptor = [[NSSortDescriptor alloc] initWithKey:HKSampleSortIdentifierStartDate ascending:YES]; 

    NSDate *lastSample = [[NSUserDefaults standardUserDefaults] objectForKey:@"lastTsUploaded"]; 
    if (!lastSample) { 
     lastSample = [NSDate dateWithTimeIntervalSinceNow:-24 * 60 * 60]; 
    } 

    unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay; 
    NSDate *now = [NSDate date]; 
    NSCalendar *gregorian = [NSCalendar currentCalendar]; 
    NSDateComponents *comps = [gregorian components:unitFlags fromDate:now]; 
    [comps setYear:[comps year] - 2]; 
    NSDate *hundredYearsAgo = [gregorian dateFromComponents:comps]; 

    NSPredicate *pred = [HKQuery predicateForSamplesWithStartDate:hundredYearsAgo endDate:[NSDate date] options:HKQueryOptionStrictStartDate]; 

    HKSampleQuery *sampleQuery = [[HKSampleQuery alloc] initWithSampleType:heartRateType predicate:pred limit:10 sortDescriptors:@[timeSortDescriptor] resultsHandler:^(HKSampleQuery *query, NSArray *results, NSError *error) { 
     if (!results) { 
      NSLog(@"There are no heart rate results. The error was: %@.", error); 
      return; 
     } 
    }]; 

    [[dcsContext sharedContext].healthStore executeQuery:sampleQuery]; 
} 

私のクエリはすべてのデータを返さないのはなぜ?

答えて

0

なぜ私の質問が実行されなかったのかを理解しようと、何時間も時間をかけて髪を引っ張ってしまったのです。私はすべての私のコードの前に以下を追加する必要がありました:

if ([HKHealthStore isHealthDataAvailable]) { 

self.healthStore = [[HKHealthStore alloc] init]; 

// Rest of my code below 

//get the heart rates 
NSDate *now = [NSDate date]; 
NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar]; 
NSDateComponents *components = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:now]; 
... 

私も、私は私のVCにプロパティとして追加healthstoreの別のインスタンスと私の[[DCSはsharedContext] .healthStore]を置き換えます。私はこれをAppleが推奨するように後でシングルトンに変えますが、今のところこの修正が機能します。

関連する問題