2015-05-28 3 views
1

Я работаю над приложением, которое считывает различные данные о здоровье от приложения HealthKit.Как получить метаданные от HealthKit?

До сих пор мне удалось получить DOB, самые последние записи высоты, веса и уровня глюкозы в крови.

Мне нужно, чтобы получить метаданные для этих объектов, в частности мне нужно получить дату/время, когда запись была введена.

Например, чтобы получить запись высоты, я использую этот метод:

func updateHeight() 
{ 
// 1. Construct an HKSampleType for Height 
let sampleType = HKSampleType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeight) 

// 2. Call the method to read the most recent Height sample 
self.healthManager?.readMostRecentSample(sampleType, completion: { (mostRecentHeight, error) -> Void in 

    if(error != nil) 
    { 
    println("Error reading height from HealthKit Store: \(error.localizedDescription)") 
    return; 
    } 

    var heightLocalizedString = self.kUnknownString; 
    self.height = mostRecentHeight as? HKQuantitySample; 
    // 3. Format the height to display it on the screen 
    if let meters = self.height?.quantity.doubleValueForUnit(HKUnit.meterUnit()) { 
    let heightFormatter = NSLengthFormatter() 
    heightFormatter.forPersonHeightUse = true; 
    heightLocalizedString = heightFormatter.stringFromMeters(meters); 
    } 


    // 4. Update UI. HealthKit use an internal queue. We make sure that we interact with the UI in the main thread 
    dispatch_async(dispatch_get_main_queue(), {() -> Void in 
    self.heightLabel.text = heightLocalizedString 
    }); 
}) 

} 

Как вы заметили, я создаю HKSampleType постоянны, то передать его в метод, называемый readMostRecentSample, который принимает это и затем возвращает самую последнюю запись для этого типа образца.

Я попытался напечатать линию возвращаемый объект, и я получил этот результат:

1,9 м «Здоровье» метаданные: {HKWasUserEntered = 1; } 2015-05-17 10:11:00 +0300 2015-05-17 10:11:00 +0300

Как вы видите, выход включает в себя метаданные объекта, но на самом деле я не смог извлечь только дата.

Кроме того, я обнаружил, что есть свойство объекта под названием metadata, я напечатал его, но это только извлечет мне булевой ли данные, введенные пользователем (вручную) или автоматически от третьего лица: println(self.height?.metadata)

выход был: [HKWasUserEntered = 1]

Буду признателен и благодарен, если кто-то может дать мне представление о том, как извлечь метаданные каждого объекта.

ответ

2

HKSample объекта и его подклассов, как HKQuantitySample есть 2 поля, которые хранят информацию о дате: startDate и enDate. Если вы пытаетесь получить дату, вы должны посмотреть.

Некоторые образцы, например температура тела, представляют собой единую точку в времени. Для этих образцов как начальная, так и конечная дата одинаковы, , потому что они оба относятся к моменту времени, когда образец был равен .

Другие образцы - например, количество шагов - представляют данные за время интервал. Здесь образец должен использовать разные даты начала и окончания. Эти даты обозначают начало и конец временного интервала выборки, соответственно.

Из документации https://developer.apple.com/library/ios/documentation/HealthKit/Reference/HKSample_Class/index.html#//apple_ref/occ/instp/HKSample/startDate

+0

Это работало отлично !. Большое спасибо –

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

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