2017-11-03 9 views
0

SpeedySloth의 Apple 샘플 코드를 사용하여, 시뮬레이터에서 심박수 샘플을 얻었지만 Series 0 Apple Watch에서 WatchOS 4.1을 실행하는 샘플을 얻지 못했습니다. 이거 버그 야? 이 문제가 발생한 사람은 누구입니까?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

동일한 Apple 샘플 코드에서 동일한 문제가 발생했습니다. 몇 달 전에 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