2017-06-05 1 views
0

Sagen wir mal eine App Anfragen Genehmigung Fett und Kohlenhydrate zu HealthKit schreiben:HealthKit nicht in der Lage HKSample mit mehreren Einträgen zu schreiben, wenn einige der Eintragstypen durch Benutzer nicht erlaubt werden

func dataTypesToWrite() -> NSSet { 
    return NSSet(objects: 
     HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.dietaryCarbohydrates)!, 
     HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.dietaryFatTotal)! 
    ) 
} 

healthStore.requestAuthorization(toShare: dataTypesToWrite() as? Set<HKSampleType>, read: nil, completion: { (success, error) -> Void in 
    if success { 
     print("completed") 
    } 
}) 

Dies wird den Benutzer auffordern, die zu ermöglichen, App, um an HealthKit zu schreiben. Wenn der Benutzer Fett und Kohlenhydrate schreiben lässt, ist alles in Ordnung. Aber wenn sie nur eine gelassen werden, und ein HKSample mit Fett und Kohlenhydrate auf HealthKit geschrieben, wird dieser Eintrag nicht angezeigt,:

func foodCorrelationForFoodItem(foodNutrients: Dictionary<String, Double>, foodTitle: String) -> HKCorrelation { 
    let nowDate: Date = Date() 

    let consumedSamples: Set<HKSample> = [ 
     HKQuantitySample(
      type: HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.dietaryCarbohydrates)!, 
      quantity: HKQuantity(unit: HKUnit.gram(), doubleValue: 5.0), 
      start: nowDate, 
      end: nowDate), 
     HKQuantitySample(
      type: HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.dietaryFatTotal)!, 
      quantity: HKQuantity(unit: HKUnit.gram(), doubleValue: 10.0), 
      start: nowDate, 
      end: nowDate) 
    ] 

    let foodType: HKCorrelationType = HKCorrelationType.correlationType(forIdentifier: HKCorrelationTypeIdentifier.food)! 
    let foodCorrelationMetadata: [String: AnyObject] = [HKMetadataKeyFoodType: foodTitle as AnyObject] 

    let foodCorrelation: HKCorrelation = HKCorrelation(type: foodType, start: nowDate, end: nowDate, objects: consumedSamples, metadata: foodCorrelationMetadata) 

    return foodCorrelation 
} 


self.healthStore.save(foodCorrelationForFoodItem) { (success, error) in 
    if let error = error { 
     print(error) 
    } 
} 

Da Apple nicht erlaubt Anwendungen zu sehen, welche HealthKit Artikel beschreibbar sind Es ist unmöglich festzustellen, ob z nur Fett sollte geschrieben werden. Gibt es dafür eine Lösung? Vielen Dank.

Antwort

1

Es stimmt nicht, dass Apple es Apps nicht erlaubt, abzufragen, auf welchen HealthKit-Typen sie schreiben kann. Möglicherweise denken Sie an Leseberechtigung, die nicht abfragbar ist. Sie können authorizationStatus(for:) unter HKHealthStore bis determine whether your app has write authorization verwenden. Wenn es notDetermined oder sharingDenied zurückgibt, hat Ihre App keine Berechtigung.

Verwandte Themen