2017-11-03 6 views
0

AppleのSpeedySlothサンプルコードを使用して、シミュレータで心拍サンプルを取得していますが、WatchOS 4.1を実行しているSeries 0 Apple Watchでサンプルを取得していません。これはバグですか?この問題を抱えている人は誰ですか?WatchOS 4は心拍数サンプルを受信して​​いませんか?

コード:

func startHeartRateQuery(from startDate: Date, updateHandler: @escaping ([HKQuantitySample]) -> Void) { 
     let typeIdentifier = HKQuantityTypeIdentifier.heartRate 
     startQuery(ofType: typeIdentifier, from: startDate) { _, samples, _, _, error in 
      guard let quantitySamples = samples as? [HKQuantitySample] else { 
       print("Heart rate query failed with error: \(String(describing: error))") 
       return 
      } 
      print("heartRate samples = \(quantitySamples)") 
      updateHandler(quantitySamples) 

     } 
    } 



    //Generic helper function 
    private func startQuery(ofType type: HKQuantityTypeIdentifier, from startDate: Date, handler: @escaping 
     (HKAnchoredObjectQuery, [HKSample]?, [HKDeletedObject]?, HKQueryAnchor?, Error?) -> Void) { 
     let datePredicate = HKQuery.predicateForSamples(withStart: startDate, end: nil, options: .strictStartDate) 
     let devicePredicate = HKQuery.predicateForObjects(from: [HKDevice.local()]) 
     let queryPredicate = NSCompoundPredicate(andPredicateWithSubpredicates:[datePredicate, devicePredicate]) 

     let quantityType = HKObjectType.quantityType(forIdentifier: type)! 

     let query = HKAnchoredObjectQuery(type: quantityType, predicate: queryPredicate, anchor: nil, 
              limit: HKObjectQueryNoLimit, resultsHandler: handler) 
     query.updateHandler = handler 
     healthStore.execute(query) 

     activeDataQueries.append(query) 
    } 
+0

あなたの質問は広すぎます。質問は、質問そのものの情報とコードに基づいて答える必要があります。 – tambre

+1

ポイントは、私はシミュレータのデータを取得しているので、コードが正しいことを知っています。他の誰かが同じ問題を抱えているかどうかをもっと尋ねています。https://forums.developer.apple.com/message/272553#272553私のデバイス – GarySabo

答えて

1

私はシリーズ3シリーズ0から私の時計をアップグレードし終わっていない、と私はもはや問題WatchOS 4.1の心拍数を取得しています。問題はハードウェアに関連している可能性があります。上記のコードを表示するためのアップデートを投稿することは、心拍データを取得するのに適しています。

0

SpeedySlothアプリケーションでデータを収集するにはいくつかの問題がありました。私が考えることができるすべてを試して、被験者のすべての投稿を読んで4日間かかりました。私は自分のコンピュータから古いXcodeのバージョンをすべて削除してしまいました(今は9.2しかインストールされていません)、私も~/Library/Logs/CoreSimulator/のすべてのシミュレータファイルを削除してしまいました。奇妙な。

1

私は年齢を問わずトラブルシューティングを行っているのと同様の問題がありました。何らかの理由で、updateHandlerがクエリに設定されていますが、新しいサンプルがHealthStoreに追加されていてもトリガーされていません。私はそれが最新のOS(4.2)の問題だと思う。

代わりに、更新されたクエリアンカーを使用して5秒ごとにHealthStoreをポーリングしました。今は期待どおりに動作します。ポーリングを続行するかどうかを確認する状態変数があります。

1

私は、同じアップルサンプルコードで非常に同じ問題を抱えていました。私はWatchOS 4.1を数ヶ月前に試してみましたが、4.2から壊れていると思います。

しかし、私は、ヘルスストアに必要なHK認証を要求するだけで動作させることができました。ただ、そのように初期化子またはHealthStoreManager.swiftをオーバーライドすることによって:

// HealthStoreManager.swift 

override init() { 
    super.init() 
    let allTypes = Set([HKObjectType.workoutType(), 
         HKSeriesType.workoutRoute(), 
         HKObjectType.quantityType(forIdentifier: .activeEnergyBurned)!, 
         HKObjectType.quantityType(forIdentifier: .distanceWalkingRunning)!]) 

    healthStore.requestAuthorization(toShare: allTypes, read: allTypes) { (success, error) in 
     if !success { 
      print(error?.localizedDescription ?? "") 
     } 
    } 
} 

最初からアプリを再インストールし、それが正しく動作するはずです。

+0

賢い!私はもはやこの心拍数のサンプルの問題を持っていませんが、私たちがHealthKitの開発者が常に走っていると思われる他の無数のバグを緩和するかどうかは疑問です – GarySabo

関連する問題