我可以继续阅读HealthKit的步骤吗?

时间:2016-02-04 06:44:44

标签: ios objective-c iphone health-kit hksamplequery

目的是在用户走完所需步骤时触发方法。 这是我的代码:

if ([HKHealthStore isHealthDataAvailable]) {
        self.healthStore = [[HKHealthStore alloc] init];
        NSSet *stepsType =[NSSet setWithObject:[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount]];
        [self.healthStore requestAuthorizationToShareTypes:nil readTypes:stepsType completion:^(BOOL success, NSError * _Nullable error) {
            if (success) {
                __block double stepsCount = 0.0;
                HKSampleType *sampleType = [HKSampleType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];
                HKSampleQuery *sampleQuery = [[HKSampleQuery alloc] initWithSampleType:sampleType predicate:nil limit:HKObjectQueryNoLimit sortDescriptors:nil resultsHandler:^(HKSampleQuery *query, NSArray *results, NSError *error) {
                    if (!error && results>0) {
                        for (HKQuantitySample *result in results) {
                            stepsCount += [result.quantity doubleValueForUnit:[HKUnit countUnit]];
                        }
                    }
                }];
                [self.healthStore executeQuery:sampleQuery];
                double currentSteps = stepsCount;
                while (1) {
                    [self.healthStore stopQuery:sampleQuery];
                    [self.healthStore executeQuery:sampleQuery];
                    if (currentSteps + requiredSteps >= stepsCount) {
                        [self triggerOneMethod];
                        break;
                    }
                }
            }
        }];
    }

但是当我运行应用程序时,Xcode显示:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: 'You cannot start a query that is already active'
***

我已经阅读了HealthKit文档,它说

  

HealthKit在后台队列上异步执行查询。最   查询在执行完毕后自动停止。

stopQuery:将停止长时间运行的查询。

我认为这两点非常重要。

有可能达到目的吗?如果是这样,我该如何解决?

1 个答案:

答案 0 :(得分:1)

在循环中,您必须在调用HKSampleQuery之前创建新的executeQuery:。您无法重用HKQuery实例。