XCode Simulator更改为以前的GPS位置

时间:2017-07-31 18:29:19

标签: ios swift cllocation

我有一个地理位置类型的应用程序,严重依赖于位置服务。具体来说,它所做的是它会在一瞬间更改为旧位置,然后再返回到当前位置。

我去了编辑方案,并检查和取消选中" 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);
        }
    }
}

0 个答案:

没有答案