加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xcode – MKDirections许多请求停止工作

发布时间:2020-12-14 19:04:59 所属栏目:百科 来源:网络整理
导读:我需要绘制一个以坐标列表(P1,P2,… Pn)开头的路径.对于我的列表中的每个下一对Pi,Pj,我调用MKDirections类的方法calculateDirectionsWithCompletionHandler,直到Pn-1元素.我第一次称之为一切看起来都很完美. 但是,如果我第二次或更远的时间,我会收到此错误
我需要绘制一个以坐标列表(P1,P2,… Pn)开头的路径.对于我的列表中的每个下一对Pi,Pj,我调用MKDirections类的方法calculateDirectionsWithCompletionHandler,直到Pn-1元素.我第一次称之为一切看起来都很完美.
但是,如果我第二次或更远的时间,我会收到此错误:

Error Domain=MKErrorDomain Code=3 "Directions Not Available" UserInfo={NSLocalizedFailureReason=Route information is not available at this moment.,MKErrorGEOError=-4,MKDirectionsErrorCode=2,NSLocalizedDescription=Directions Not Available}

并且没有任何作品了.

我认为这是因为我在很短的时间内调用了API太多次了.我在网上发现我应该使用属性direction.calculating并检查请求是否已在进行中.我无法理解如何使用它.有人可以帮帮我吗?谢谢.

解决方法

我经历了相同的单元测试.

我通常使用这种API的方法是使用速率限制器.它限制在给定时间范围内对API的调用次数.

有几个实现,我成功使用,像这样一个https://github.com/nuclearace/SwiftRateLimiter

它允许您选择呼叫次数和时间范围. (你甚至可以为一个API使用两个实例,所以说:每秒最多10个电话,每分钟最多100个电话)

我不太喜欢direction.isCalculating方法,因为它使一般情况下的线程难以同步.
一种简单的方法是在进行下一次呼叫之前等待答案.
得到答案后,directions.isCalculating显然是错误的.

但我更喜欢速率限制器.

Apple正在限制“写得不好/行为不端的应用程序”,但我不知道Apple记录了它用来执行此操作的速率限制.

代码示例:

let GlobalDirectionsRateLimiter = RateLimiter(tokensPerInterval: 3,interval: 1.0)


GlobalDirectionsRateLimiter.removeTokens(1) {_,_ in
    directions.calculate { (response: MKDirections.Response?,error: Swift.Error?) in
    ...
    }
}

不要相信我的速率限制器参数.我的应用程序中的所有计算都来自用户操作,因此我不需要更多.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读