2014-09-24 3 views
2
-(void)viewDidAppear:(BOOL)animated 
{ 

[super viewDidAppear:animated]; 
if ([HKHealthStore isHealthDataAvailable]){ 
    NSSet *writeDataTypes = [self dataTypesToWrite]; 
    NSSet *readDataTypes = [self dataTypesToRead]; 

    [self.healthStore requestAuthorizationToShareTypes:writeDataTypes readTypes:readDataTypes completion:^(BOOL success, NSError *error) { 

     NSLog(@"%s",__func__); 
     if (!success) { 
      NSLog(@"You didn't allow HealthKit to access these read/write data types. In your app, try to handle this error gracefully when a user decides not to provide access. The error was: %@. If you're using a simulator, try it on a device.", error); 
      return; 
     } 

     dispatch_async(dispatch_get_main_queue(), ^{ 
      // Update the user interface based on the current user's health information. 
      NSLog(@"=========================== %s",__func__); 
     }); 
    }]; 
} 


} 

requestAuthorizationToShareTypes не вызывает метод завершения обратного вызова.requestAuthorizationToShareTypes метод не отображается Запрос разрешения в iOS 8 Xcode 6

+0

Если лист никогда не появляется и завершение никогда не вызывается, то это звучит как ошибка, которую вы должны записать (bugreporter.apple.com). Пробовали ли вы смотреть на консольный вывод с устройства, чтобы узнать, не зарегистрированы ли какие-либо ошибки? – Allan

+0

Да, я ничего не пробовал на консоли. –

+0

У меня такая же проблема, поэтому я сбой: https: //devforums.apple.com/thread/248835? Tstart = 0 – marciokoko

ответ

4

У меня была аналогичная проблема с коробкой разрешений не появляются и не создали HKHealthStore правильно, поставив это заранее установил ее для меня

self.healthStore = [[HKHealthStore alloc] init]; 
2

Вот пример реализации, который возвращает типы вместо строк, как описано в разделе комментариев.

-(NSSet*)datatypesToWrite { 

    NSArray *quantityTypes = 
    @[HKQuantityTypeIdentifierHeartRate, 
    HKQuantityTypeIdentifierBodyTemperature, 
    HKQuantityTypeIdentifierBloodPressureSystolic, 
    HKQuantityTypeIdentifierBloodPressureDiastolic, 
    HKQuantityTypeIdentifierRespiratoryRate]; 

    NSMutableArray *hkTypes = [[NSMutableArray alloc] init]; 

    for (NSString *identifier in quantityTypes) { 
    HKQuantityType *quantType = 
     [HKObjectType quantityTypeForIdentifier:identifier]; 
    [hkTypes addObject:quantType]; 
    } 

    // Make sure the types are of the correct style (Quantity, Category, Etc.) 
    HKCategoryType *catType = 
    [HKObjectType categoryTypeForIdentifier:HKCategoryTypeIdentifierSleepAnalysis]; 
    [hkTypes addObject:catType]; 

    return [[NSSet alloc] initWithArray:hkTypes]; 
} 

Каждый раз, когда вы запрашиваете новые типы в первый раз диалог модального разрешения будет отображаться (но это не будет отображаться снова, если вы повторно запрос для разрешения не предоставляется). Рекомендации Apple направлены на то, чтобы вы могли потребовать все, что вам может понадобиться, но я немного против лучших методов для меня, чтобы просить 12 типов спереди, если я знаю, что кто-то попросил сохранить их в нескольких из них.

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

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