2016-08-24 5 views
0

Мы делаем приложение для отслеживания воды, где пользователь может добавлять образцы воды. Данные добавляются в 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.

+0

Где вы обратите внимание на образец еще после его удаления? Телефон или часы? – Allan

+0

Они остаются в приложении «Здоровье» по телефону. –

ответ

1

Это известная проблема, которая фиксируется в прошивке 10 и watchOS 3.

+0

Спасибо. Я буду следить за тем, чтобы это работало для меня на iOS 10 и примет это позже. –

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

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