我目前正在处理一个我无法单独解决的问题。我尝试将 HealthKit 集成到我的应用程序中。正常的解决方案工作完美,我目前正在处理错误以在出现问题时通知用户。问题是方法“SaveObject()”似乎是异步的,如果设置成功,外部方法已经返回 false。我不知道如何解决这个问题。 :-(
下面是我目前的代码片段。
private bool _saveToHealth(Data d)
{
HKHealthStore hkStore = new HKHealthStore ();
bool isSuccessful = false;
hkStore.SaveObject (d, (bool arg1, NSError arg2) => {
isSuccessful = arg1;
});
return isSuccessful;
}
最佳答案
你真的不能这样写代码。您需要重组代码,以便在其他地方处理保存状态。
正如您所指出的,不能保证在您返回之前执行带有 isSuccessful = arg1 的委托(delegate)。
现在,如果上述调用是从异步方法执行的,您可以调用该方法的异步版本:
async bool SaveToHealth (Data d)
{
var hkStore = new HKHealthStore ();
try {
await hkStore.SaveObjectAsync (d);
return true;
} catch {
return false;
}
}
```
具有签名的方法的异步版本被映射为在失败时抛出异常。
关于c# - Xamarin iOS : Wait for HKHealthStore SaveObject to finish,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26129514/