Swift 1.2 HealthKit

Я пытаюсь получить доступ к HK в своем приложении для iOS. У меня все настроено, или я так думал, правильно. Но когда он запускается, я получаю сообщение об ошибке «-[__NSArrayI _allowAuthorizationForReadingWithEntitlements:]: нераспознанный селектор, отправленный экземпляру 0x7f99badc54f0», и я не знаю, почему. Я следил за публикацией Рэя Вендерлиха, и даже его приложение не работает, когда я переименовываю его и запускаю.

Вот мой код, если у кого-то есть идеи, я пытался просмотреть отладку и не могу понять

import Foundation
import HealthKit

class HealthManager {

let healthKitStore : HKHealthStore = HKHealthStore()

func authorizeHealthKit(completion: ((success:Bool, error:NSError!) -> Void)!) {
    // What we want to read
    let healthKitTypesToRead = Set(arrayLiteral:[
        HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierBiologicalSex),
        HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierDateOfBirth),
        HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBodyMassIndex),
        HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeight),
        HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierDistanceWalkingRunning),
        HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierActiveEnergyBurned),
        HKObjectType.workoutType()
        ])
    // What we want to write
    let healthKitTypesToWrite = Set(arrayLiteral: [
        HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierBiologicalSex),
        HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierDateOfBirth),
        HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBodyMassIndex),
        HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeight),
        HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierDistanceWalkingRunning),
        HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierActiveEnergyBurned),
        HKObjectType.workoutType()
        ])

    // Checking if healthkit is available
    if !HKHealthStore.isHealthDataAvailable() {
        let error = NSError(domain: "com.mpc.Health", code: 2, userInfo: [NSLocalizedDescriptionKey:"HealthKit is not available in this Device"])
        if( completion != nil )
        {
            completion(success:false, error:error)
        }
        return;
    }

    //Requesting the authorization
    healthKitStore.requestAuthorizationToShareTypes(nil, readTypes: healthKitTypesToRead) { (success, error) -> Void in
        if( completion != nil )
        {
            completion(success:success,error:error)
        }
    }
}

}

person trever    schedule 28.04.2015    source источник


Ответы (2)


И для HealthKitTypesToRead, и для HealthKitTypesToWrite вы создаете NSSet, который содержит массив HKObjectTypes. Это должен быть NSSet HKObjectTypes без массива.

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

person Allan    schedule 29.04.2015
comment
Благодарю вас! Кронштейны все испортили, снял их и моя проблема была решена! - person trever; 29.04.2015

На всякий случай, если кто-то ищет код, у меня сработало следующее

let healthKitTypesToRead = Set(arrayLiteral:
  HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierBiologicalSex)!,
  HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierDateOfBirth)!,
  HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBodyMassIndex)!,
  HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeight)!,
  HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierDistanceWalkingRunning)!,
  HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierActiveEnergyBurned)!,
  HKObjectType.workoutType()
  )
person user781404    schedule 10.06.2015