2016-03-06 39 views
0
GKLeaderboardSet.loadLeaderboardSetsWithCompletionHandler(_ completionHandler: (([GKLeaderboardSet]?,NSError?) -> Void)?) 

我试图使用此类函数来检索排行榜套从游戏中心的信息。如何使用快捷功能loadLeaderboardSetsWithCompletionHandler

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

这是我试图这样做,但Xcode中说

“无法将类型的价值 '([字符串],_) - >虚空' 预期参数类型“(([ GKLeaderboardSet]?,NSError?) - > Void)?“

我应该为参数添加什么内容?

什么游戏中心编程指南告诉我这样做:

之前,你可以加载包含了一组内的排行榜,你必须加载集本身。从Game Center中检索您的游戏的排行榜集列表并显示它们的标题。使用loadLeaderboardSetsWithCompletionHandler:方法为您的应用程序检索排行榜集。然后,您可以使用loadLeaderboardWithCompletionHandler:方法为特定的排行榜集合加载排行榜。从GKLeaderboardSet.h

@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.loadLeaderboardSetsWithCompletionHandler({ (leaderboard, error) -> Void in 
      }) 

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

参数:

completionHandler 

当类别被从服务器检索被称为A嵌段。

的块接收下列参数:

leaderboardSets
GKLeaderboardSet对象,它提供了领先的阵列设置为你的游戏。如果发生错误,则此值可能不为零。在这种情况下,数组可以容纳游戏工具包在发生错误之前能够下载的任何数据。

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

+0

你能发布关于'leaderboardSets'的相关代码吗? –

+0

你的代码看起来不错。也许你有一个旧版本的Xcode,不接受这种封闭方式。我使用Xcode 7.2.1尝试了相同的代码,并且没有问题编译。 – carlos

+0

感谢您的回复,我目前正在使用Xcode 7.2,在更新到7.2.1 –

回答

0

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