来自 GKLeaderboard loadScoresWithCompletionHandler 的 NSURLErrorDomain 代码=-1005:

NSURLErrorDomain code=-1005 from GKLeaderboard loadScoresWithCompletionHandler:

我在 loadScoresWithCompletionHandler:

的回调中收到以下错误
Error Domain=NSURLErrorDomain Code=-1005 
"The operation couldn’t be completed. (NSURLErrorDomain error -1005.)"

之前和之后对 Game Center 的其他调用均成功。 (它们在各种线程上运行)。如果初始化排行榜请求如下:

GKLeaderboard *leaderboard = [[GKLeaderboard alloc] init];

leaderboard.identifier  = leaderboardIdentifier; // valid identifier
leaderboard.playerScope = GKLeaderboardPlayerScopeFriendsOnly;
leaderboard.range       = NSMakeRange(1, 100); // max. allowed range.
leaderboard.timeScope   = GKLeaderboardTimeScopeAllTime;

[leaderboard loadScoresWithCompletionHandler:^(NSArray *scores, NSError *error) {
    // ...
}];

这是怎么回事,我该如何解决这个问题?

loadScoresWithCompletionHandler: 的调用是通过对 NSOperationQueue 的操作进行的,其任务是向多个排行榜发出分数请求(我对每个 localPlayerScore 都感兴趣)和等待所有回应。第一个响应已经出现错误。

更新 -1005表示kCFURLErrorNetworkConnectionLost;根本原因尚不清楚。

UPDATE 如果我只发送一个请求(而不是到目前为止通常并行发送 6 个请求),我会收到错误 NSURLErrorDomain -1001,表示 kCFURLErrorTimedOut,或 GKErrorDomain 3 ...

出于某种原因,此替代调用不会导致错误:

GKLeaderboard *leaderboard = 
    [[GKLeaderboard alloc] initWithPlayers:@[ GKLocalPlayer.localPlayer ]];

leaderboard.identifier = leaderboardIdentifier;
leaderboard.timeScope  = GKLeaderboardTimeScopeAllTime;

[leaderboard loadScoresWithCompletionHandler:^(NSArray *scores, NSError *error) {
    // ...
}];

问题已解决。