使用iOS 8中的Handler()在Swift中为NearByPlayers启动浏览器

使用iOS 8中的Handler()在Swift中为NearByPlayers启动浏览器,ios,bluetooth,swift,ios8,gkmatchmaker,Ios,Bluetooth,Swift,Ios8,Gkmatchmaker,我目前正在用Swift制作一个两人战略棋盘游戏,需要通过本地WiFi或蓝牙连接两台iPad。无论我今天尝试了什么,我都无法让他们相互检测(我尝试了本地WiFi和蓝牙) 这是我的授权码,在我的应用程序首次启动时在UIViewController中运行(它总是返回“Self-local player is authenticated.”以及ID: private func authenticateLocalPlayer() { var localPlayer = getLocalPlayer

我目前正在用Swift制作一个两人战略棋盘游戏,需要通过本地WiFi或蓝牙连接两台iPad。无论我今天尝试了什么,我都无法让他们相互检测(我尝试了本地WiFi和蓝牙)

这是我的授权码,在我的应用程序首次启动时在UIViewController中运行(它总是返回“Self-local player is authenticated.”以及ID:

private func authenticateLocalPlayer() {
    var localPlayer = getLocalPlayer()

    // If Apple were doing their job right, this is what the proper code should look like:
    // var localPlayer = GKLocalPlayer.localPlayer()

    if ( !localPlayer.authenticated ) {
        localPlayer.authenticateHandler = { (viewController : UIViewController!, error : NSError!) -> Void in
            NSLog("Error: \(error)")
            if viewController != nil {

                // Authenticated?
                self.presentViewController(viewController, animated: true, completion: nil)
                NSLog("viewController is not nil")
            } else if (localPlayer.authenticated == true) {
                NSLog("Self local player is authenticated.")
                NSLog("My name is \(localPlayer.playerID)")
            } else {
                NSLog("Not authenticated")
                NSLog("Player is \(localPlayer.playerID)")
            }
        }
    } else {
        NSLog("Player is already authenticated!")
    }
}
下面是我在单独的UIViewController中检测附近设备的代码:

override func viewDidLoad() {
    devicesLabel.text = "Waiting for devices..."
    searchForDevices()
    NSLog("Ran searchForDevices()")
}

private func searchForDevices() {
    GKMatchmaker.sharedMatchmaker().startBrowsingForNearbyPlayersWithHandler() {
        var status = $1 ? "true" : "false"
        self.devicesLabel.text = "Reachability changed for player \($0) with status: \(status)"
    }
}
无论我用我的两台iPad做什么(都是iPad3型号),都没有一台能看到另一台。我用Handler给NearByPlayers打StartBrowsing是正确的吗

另外请注意,在上面的授权代码中,我使用的是本文推荐的Objective-C解决方案,因为“快速方式”对我也不起作用


我还通过本地WiFi在两台设备上运行了Spelltower,因此看起来硬件运行正常。你知道这里可能出了什么问题吗?

我决定放弃通过游戏中心开发,改为使用多点连接。

你没有注册课程来接收邀请更新。你需要注册ister一个类并实现符合GKLocalPlayerListener协议的方法。请参阅我在本文中的回复(在Objective-C中,但同样的概念适用):


你能确保
GKMatchmaker.sharedMatchmaker()
正在返回一个共享的matchmaker实例吗?为什么当
GKLocalPlayer.localPlayer()
没有返回时,这会起作用呢?它是从NSLog as返回的,所以我认为是。有没有更好的方法来检查它?据我所知,苹果公司制造的GKLocalPlayer.localPlayer()Obj-C的一个公共方法和Swift的一个私有方法,我们都很困惑为什么。我可以问一下,您对iOS的哪个版本有这个问题吗?我以前工作得很好,但最新版本(8.4)我注意到这也不再适用于我。我已经为此申请了雷达。如果你决定再试一次,请让我们知道你是否能让它工作。