我想刪除我的Xamarin.iOS應用程序增加了一個HKObject。我能夠成功地保存和查詢從Apple HealthKit的數據,但它運行後的HKHealthStore.DeleteObjectAsync(和HKHealthStore.DeleteObject)方法消失。沒有錯誤返回並且下一行代碼沒有被擊中。以下是可用於重新創建問題的示例代碼。由於沒有任何迴應或例外情況,因此我不確定從哪裏開始嘗試解決此問題。有誰知道我可以如何獲得在Xamarin.iOS中工作的DeleteObjectAsync(或DeleteObject)?爲什麼我HKHealthStore.DeleteObjectAsync法不執行,並返回在Xamarin的對象?
爲我使用的AsyncHelpers類的代碼可以發現here。
public partial class ViewController : UIViewController
{
string Id => "54b50df8-35ab-4f53-ac19-0ad0c3d3551a";
protected ViewController(IntPtr handle) : base(handle)
{
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
}
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);
}
}
}
的DeleteObjectAsync調用工作一次我刪除了使用塊的HKHealthStore - 謝謝 – mpt1555