Xcode 许多请求停止工作

Xcode 许多请求停止工作,xcode,mapkit,directions,Xcode,Mapkit,Directions,我需要画一条以坐标列表(P1,P2,…Pn)开始的路径。对于列表中的每一对Pi,Pj,我调用类MKDirections的方法calculateDirectionsWithCompletionHandler,直到Pn-1元素。我第一次叫它的时候,一切看起来都很完美。 但如果我再打一次或更多的电话,我会发现这个错误: Error Domain=MKErrorDomain Code=3 "Directions Not Available" UserInfo={NSLocalizedFailureRea

我需要画一条以坐标列表(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.computing
并检查请求是否已经在进行中。我不知道如何使用它。有人能帮我吗?谢谢。

我在做单元测试时也有同样的经历

我通常使用这样的API使用一个速率限制器。它限制了在给定时间范围内对API的调用数量

有几个实现,我成功地使用了,就像这个

它允许您选择通话次数和时间范围。(您甚至可以为一个API使用两个实例,例如:每秒最多10个调用,每分钟最多100个调用)

我不太喜欢direction.isCalculating方法,因为在一般情况下,它会使线程难以同步。 一个简单的方法是在打下一个电话之前等待应答。 在你得到答案后,
directions.isCalculating
显然是错误的

但我更喜欢利率限制器

苹果正在限制“写得不好/行为不端的应用程序”,但我不知道苹果记录了它使用的速率限制

代码示例:

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


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

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

令人惊讶的是,竟然没有人对这一点说话!