Мы делаем приложение для отслеживания воды, где пользователь может добавлять образцы воды. Данные добавляются в Health непосредственно из приложений Apple Watch и iPhone. Одна из особенностей - отмена.Удаление образца воды из HealthKit на Apple Watch
Я пытаюсь удалить образцы воды из Apple Watch и работает отлично. Однако, если я добавлю образец на iPhone и удалю его из Apple Watch, образец не будет удален. Худшая часть, я не получаю никакой ошибки, обратный вызов HealthKit возвращает успех.
- (void)removeSampleWithCompletion:(void (^ _Nonnull)(bool success, NSError *_Nullable error))completion {
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *myDate = [NSDate date];
NSDate *startDate = [calendar startOfDayForDate:myDate];
// the type you're trying to delete (this could be heart-beats/steps/water/calories/etc..)
HKQuantityType *waterType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierDietaryWater];
// the predicate used to execute the query
NSPredicate *queryPredicate = [HKSampleQuery predicateForSamplesWithStartDate:startDate
endDate:myDate
options:HKQueryOptionStrictEndDate];
// prepare the query
HKSampleQuery *query = [[HKSampleQuery alloc] initWithSampleType:waterType
predicate:queryPredicate
limit:100
sortDescriptors:nil
resultsHandler:^(HKSampleQuery * _Nonnull query, NSArray<__kindof HKSample *> * _Nullable results, NSError * _Nullable error) {
if (!error) {
// Successfully retreived samples
// Filter only our samples. It is no possible to delete others.
NSMutableArray <HKSample *>*locassaSamples = [NSMutableArray new];
for (HKSample *sample in results) {
if ([sample.sourceRevision.source.bundleIdentifier isEqual:@"com.companyname.appname"]) {
[locassaSamples addObject:sample];
}
}
// Remove last
HKSample *theLast = locassaSamples.lastObject;
if (theLast == nil) {
return;
}
[self.healthStore deleteObject:theLast
withCompletion:^(BOOL success, NSError * _Nullable error) {
completion(success, error);
}];
return;
} else {
completion(FALSE, error);
}
}];
// Source http://stackoverflow.com/a/38263174/1162044
// last but not least, execute the query
[self.healthStore executeQuery:query];
}
Обновление.
Я создал радар #28007271.
Где вы обратите внимание на образец еще после его удаления? Телефон или часы? – Allan
Они остаются в приложении «Здоровье» по телефону. –