【问题标题】:how to use swift function loadLeaderboardSetsWithCompletionHandler如何使用 swift 函数 loadLeaderboardSetsWithCompletionHandler
【发布时间】:2016-03-07 20:18:54
【问题描述】:
GKLeaderboardSet.loadLeaderboardSetsWithCompletionHandler(_ completionHandler: (([GKLeaderboardSet]?,NSError?) -> Void)?)

我正在尝试使用此类函数从 Game Center 中检索排行榜集的信息。

            var leaderboardSetsRetrived = [""]
        GKLeaderboardSet.loadLeaderboardSetsWithCompletionHandler({ (leaderboardSets, error) -> Void in
            leaderboardSetsRetrived = leaderboardSets
        })

这是我试图做的,但 xcode 说

“无法将 '([String], _) -> Void' 类型的值转换为预期的参数类型 '(([GKLeaderboardSet]?, NSError?) -> Void)?”

我应该为参数输入什么?

Game Center 编程指南告诉我该怎么做:

在加载集合中包含的排行榜之前,您必须加载集合本身。从 Game Center 检索您的游戏的排行榜集列表并显示它们的标题。使用 loadLeaderboardSetsWithCompletionHandler: 方法为您的应用检索排行榜集。然后,您可以使用 loadLeaderboardsWithCompletionHandler: 方法加载特定排行榜集的排行榜。

@available(iOS 7.0, *)
public class GKLeaderboardSet : NSObject, NSCoding, NSSecureCoding {

    public var title: String { get } // Localized set title.

    public var groupIdentifier: String? { get } // set when leaderboardSets have been designated a game group; set when loadLeaderboardSetsWithCompletionHandler has been called for leaderboards that support game groups
    public var identifier: String? // leaderboard set.

    // Loads array with all sets for game
    // Possible reasons for error:
    // 1. Communications problem
    // 2. Unauthenticated player
    // 3. Set not present
    @available(iOS 7.0, *)
    public class func loadLeaderboardSetsWithCompletionHandler(completionHandler: (([GKLeaderboardSet]?, NSError?) -> Void)?)

    // Loads array with all leaderboards for the leaderboardSet
    // Possible reasons for error:
    // 1. Communications problem
    // 2. Unauthenticated player
    @available(iOS 7.0, *)
    public func loadLeaderboardsWithCompletionHandler(completionHandler: (([GKLeaderboard]?, NSError?) -> Void)?)
}

extension GKLeaderboardSet {

    // Asynchronously load the image. Error will be nil on success.

    public func loadImageWithCompletionHandler(completionHandler: ((UIImage?, NSError?) -> Void)?)
}

来自 GKLeaderboardSet.h 的代码

现在我的代码可以运行了。

GKLeaderboardSet.loadLeaderboardSetsWithCompletionHandler({ (leaderboard, error) -> Void in
            })

但由于某种原因,该函数没有接收任何参数。我无法将应该检索到的 leaderboardSets 保存到我创建的变量中。根据 GKLeaderboard 类参考:

参数:

completionHandler

从服务器检索到类别时调用的块。

块接收以下参数:

leaderboardSets
为您的游戏提供排行榜集的GKLeaderboardSet 对象数组。如果发生错误,此值可能为非零。在这种情况下,该数组包含 Game Kit 在错误发生之前能够下载的任何数据。

error
如果发生错误,则此错误对象描述错误。如果操作成功完成,则值为 nil。

【问题讨论】:

  • 能发一下leaderboardSets的相关代码吗?
  • 您的代码看起来不错。也许你有一个旧版本的 Xcode 不接受这种方式的闭包。我使用 Xcode 7.2.1 尝试了相同的代码,它编译没有问题。
  • 感谢回复,我目前用的是Xcode 7.2,更新到7.2.1后再试
  • 不,更新到 7.2.1 后仍然无法正常工作。同样的错误信息。

标签: ios swift gamekit game-center-leaderboard


【解决方案1】:

现已修复。我犯的一个错误:leaderboardSetsRetrieved 应该是 [GKLeaderboardSet] 而不是字符串数组。其次,由于某种原因leaderboardSetsRetrived = leaderboardSets确实有效,只是Xcode由于某种原因没有自动完成leaderboardSets,我认为参数有问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 2017-01-10
    • 2021-12-25
    • 1970-01-01
    相关资源
    最近更新 更多