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

Я пытаюсь использовать эту функцию класса для извлечения информации из наборов лидеров из Game Center.Как использовать быструю функцию loadLeaderboardSetsWithCompletionHandler

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

Это то, что я пытался сделать, но Xcode говорит

«Невозможно преобразовать значение типа '([String], _) -> Пустота' ожидаемого типа аргумента«(([ 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 Class Reference:

Параметры:

completionHandler 

блок, который вызывается, когда категории были получены с сервера.

Блока принимает следующие параметры:

leaderboardSets
Массив GKLeaderboardSet объектов, что обеспечивает лидер наборы для игры. Если произошла ошибка, это значение может быть не ноль. В этом случае массив хранит любые данные, которые Game Kit мог загрузить до возникновения ошибки.

error
При возникновении ошибки этот объект ошибки описывает ошибку. Если операция завершена успешно, значение равно нулю.

+0

Не могли бы вы разместить относительный код о 'leaderboardSets'? –

+0

Ваш код выглядит хорошо. Возможно, у вас есть более старая версия Xcode, которая не принимает это закрытие. Я пробовал этот же код с помощью Xcode 7.2.1, и он компилируется без проблем. – carlos

+0

Спасибо за ответ, я в настоящее время использую Xcode 7.2, попробую еще раз после обновления до 7.2.1 –

ответ

0

Исправлено сейчас. Ошибка, которую я сделал: leaderboardSetsRetrieved должен быть [GKLeaderboardSet] вместо массива строк. Во-вторых, по какой-то причине leaderboardSetsRetrived = leaderboardSets действительно работает, просто Xcode по какой-то причине не завершил leaderboardSets, и я подумал, что что-то не так с параметром.