I am trying to delete an HKObject added by my app. I am able to successfully save and query the data from the Apple HealthKit, but the HKHealthStore.DeleteObjectAsync method vanishes after it is run. There is no error returned and the next line of code does not get hit. Below is sample code that can be used to recreate the issue. Since there is no response or exception, I am not sure where to start trying to troubleshoot this issue. Does anyone know how I can get the DeleteObjectAsync (or DeleteObject) working?
The code for the AsyncHelpers class that I am using can be found here.
public partial class ViewController : UIViewController
{
string Id => "54b50df8-35ab-4f53-ac19-0ad0c3d3551a";
protected ViewController(IntPtr handle) : base(handle)
{
// Note: this .ctor should not contain any initialization logic.
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
// Perform any additional setup after loading the view, typically from a nib.
}
partial void AddUsage(UIButton sender) //<- Button TouchUpInside
{
Tuple<HKUnit, double> entryItems = new Tuple<HKUnit, double>(HKUnit.CreateLiterUnit(HKMetricPrefix.Milli), 10);
HKQuantity quantity = HKQuantity.FromQuantity(entryItems.Item1, entryItems.Item2);
HKQuantityType qType = HKQuantityType.Create(HKQuantityTypeIdentifier.DietaryWater);
HKMetadata metadata = new HKMetadata { ExternalUuid = Id };
HKQuantitySample sample = HKQuantitySample.FromType(qType, quantity, new NSDate(), new NSDate(), metadata);
using (HKHealthStore store = new HKHealthStore())
{
AsyncHelpers.RunSync(async () =>
{
Tuple<bool, NSError> saveResult = await store.SaveObjectAsync(sample);
});
}
}
partial void DeleteUsage(UIButton sender) //<- Button TouchUpInside
{
using (HKHealthStore store = new HKHealthStore())
{
NSCalendar calendar = NSCalendar.CurrentCalendar;
NSDate now = new NSDate();
NSDateComponents components = calendar.Components(NSCalendarUnit.Year | NSCalendarUnit.Month | NSCalendarUnit.Day, now);
NSDate startDate = calendar.DateByAddingUnit(NSCalendarUnit.Day, -2, now, NSCalendarOptions.None);
NSDate endDate = calendar.DateByAddingUnit(NSCalendarUnit.Day, 1, now, NSCalendarOptions.None);
HKQuantityType qType = HKQuantityType.Create(HKQuantityTypeIdentifier.DietaryWater);
NSPredicate pred = HKQuery.GetPredicateForSamples(startDate, endDate, HKQueryOptions.None);
HKSampleQuery query = new HKSampleQuery(qType, pred, 0, null, (sampleQuery, results, error) =>
{
HKObject[] arr = results.Where(r => r.Metadata.ExternalUuid == Id).ToArray();
if (arr.Length > 0)
{
AsyncHelpers.RunSync(async () =>
{
Tuple<bool, NSError> deleteResult = await store.DeleteObjectAsync(arr.First()); // <- The breakpoint on this line is hit
string s = "s"; // <- The breakpoint on this line isn't ever hit
});
}
});
store.ExecuteQuery(query);
}
}
}
}