我有一个地理位置类型的应用程序,严重依赖于位置服务。具体来说,它所做的是它会在一瞬间更改为旧位置,然后再返回到当前位置。
我去了编辑方案,并检查和取消选中" Corelocation Allow Location Simulation"并有同样的问题。我通过指定"自定义位置来更改位置"在我的模拟器上。
如果我在模拟器上使用不同类型的手机,问题似乎就解决了。我必须最终演示这个应用程序,我知道它运行良好,但我不想因为XCode模拟器正在起作用而感到尴尬!我想我可以继续重启模拟器或使用其他类型的手机,但我希望我能找到另一种解决方法。
当我获得swiftlocation的位置时会发生这种情况。除了以下内容之外,我还有其他代码,但这基本上就是我发送到我的数据库的信息(即sourcelocation)。
public class BindableBase : INotifyPropertyChanged
{
private readonly List<(SynchronizationContext context, PropertyChangedEventHandler handler)> _handlers = new List<...>();
public event PropertyChangedEventHandler PropertyChanged
{
add => _handlers.Add((SynchronizationContext.Current, value));
remove
{
var i = 0;
foreach (var item in _handlers)
{
if (item.handler.Equals(value))
{
_handlers.RemoveAt(i);
break;
}
i++;
}
}
}
protected Task RaisePropertyChanged(string propertyName)
{
var args = new PropertyChangedEventArgs(propertyName);
var tasks = _handlers
.GroupBy(x => x.context, x => x.handler)
.Select(g => invokeContext(g.Key, g));
return Task.WhenAll(tasks);
Task invokeContext(SynchronizationContext context, IEnumerable<PropertyChangedEventHandler> l)
{
if (context != null)
{
var tcs = new TaskCompletionSource<bool>();
context.Post(o =>
{
try { invokeHandlers(l); tcs.TrySetResult(true); }
catch (Exception e) { tcs.TrySetException(e); }
}, null);
return tcs.Task;
}
else
{
return Task.Run(() => invokeHandlers(l));
}
}
void invokeHandlers(IEnumerable<PropertyChangedEventHandler> l)
{
foreach (var h in l)
h(this, args);
}
}
}