2015-10-02 2 views
0

Я написал базовое приложение для iPhone, которое успешно считывает Weight из HealthKit, но мое соответствующее приложение WatchOS возвращает только пустые результаты. Я использую тот же код HealthKit на обеих платформах. Я знаю, что авторизация работает над Watch, потому что запрос авторизации возвращает isEnabled = success.Невозможно прочитать образцы HealthKit на WatchOS 2, но он работает на iOS

Поведение одинаково на тренажерах и аппаратных устройствах, а Телефон возвращает правильный вес, но часы возвращают набор результатов с 0 образцами (results?.count=0). Возможность HealthKit включена как для часов, так и для телефонных целей в одном проекте. Я использую WatchOS 2 и Xcode 7.0.1.

Не могли бы вы помочь мне понять, почему часы не возвращают никаких результатов?

ViewController код для iPhone

@IBAction func btnReadWeight(sender: AnyObject) { 
    HealthKit().recentWeight() { weight, error in 
     dispatch_async(dispatch_get_main_queue(), {() -> Void in 
      self.txtWeight.text=String(format:"%.1f",weight) 
     }) 
    } 
} 

InterfaceController кода на Дозоре

@IBAction func btnReadWeight() { 
    HealthKit().recentWeight() { weight, error in 
     dispatch_async(dispatch_get_main_queue(), {() -> Void in 
      self.myLabel.setText(String(format:"%.1f",weight)) 
     }) 
    } 
} 

Healthkit код (идентичен на iPhone и смотреть)

func recentWeight(completion: (Double, NSError?) ->()) 
{ 
    let type = HKSampleType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBodyMass) 
    let today = NSDate() 
    let querystart = NSCalendar.currentCalendar().dateByAddingUnit(
     .Day, 
     value: -365, // since a year ago 
     toDate: today, 
     options: NSCalendarOptions(rawValue:0)) 

    let predicate = HKQuery.predicateForSamplesWithStartDate(querystart , endDate: NSDate(), options: .None) 

    let query = HKSampleQuery(sampleType: type!, predicate: predicate, limit: 0, sortDescriptors: nil) { query, results, error in 
     var recentweight: Double = 0 
     print(results?.count) 
     if results?.count > 0 
     { 
      for result in results as! [HKQuantitySample] 
      { 
       recentweight = result.quantity.doubleValueForUnit(HKUnit.gramUnit())/1000.0 
      } 
     } 
     completion(recentweight, error) 
    } 
    healthKitStore.executeQuery(query) 
} 

ответ

1

Существует два способа, которые могли бы объяснить, что вы можете увидеть:

(1) Все сэмплы, сохраненные в режиме синхронизации часов, должны быть записаны навсегда. То же самое не относится к образцам, сохраненным на телефоне. Часы имеют ограниченную емкость и не так быстро, как ваш телефон, поэтому хранить полную базу данных всех образцов на часах невозможно. Если образец веса возник из телефона, он не будет присутствовать на часах.

(2) Чтобы ограничить общий размер базы данных HealthKit на часах, образцы, сохраненные на часах, истекают через неделю и становятся недоступными. См. the HKHealthStore documentation.

+0

Гений, спасибо. Я не рассматривал поток образцов HealthKit между устройствами. – solipsia

 Смежные вопросы

  • Нет связанных вопросов^_^