【发布时间】: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