DashboardViewController

DashboardViewController

我在同一个视图控制器中有一个包含CBCentralManager和CBPeripheral组件的可运行应用程序,但是现在希望分离逻辑,以便可以有一个单独的连接屏幕。我的计划是在“连接”页面上创建CBCentralManager,发现并连接外围设备,选择到“仪表板”页面,然后在那儿使用CBPeripheral。

我的代码(简化后)如下:

var globalBTDevice : CBPeripheral! // Only using this as a global variable because I can't get this to pass using prepareForSegue

class ConnectionPageViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, CBCentralManagerDelegate {
    var centralManager : CBCentralManager!

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        globalBTDevice = self.allFoundDevices[indexPath.row]
        centralManager.stopScan()

        self.performSegueWithIdentifier("connectedPeripheralSegue", sender: self)
    }


    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
        if segue.identifier == "connectedPeripheralSegue" {
            let destinationVC = segue.destinationViewController as DashboardViewController! // ERROR here: cannot convert value of type "UIViewController" to type "DashboardViewController!" in coercion.
            globalBTDevice.delegate = destinationVC
        }
        centralManager.connectPeripheral(globalBTDevice, options: nil)
    }
}




class DashboardViewController: UIViewController, CBPeripheralDelegate {
    // All delegate methods implemented here
}


我在两个带有标识符“ connectedPeripheralSegue”的视图控制器之间设置了segue。

另外,DashboardViewController实际上是用于TabBarController的选项卡的-不知道这是否有所不同。

所以我得到的问题是我无法在标记为ERROR的行上将目标视图控制器转换为DashboardViewController。这似乎是由实现CBPeripheralDelegate协议的VC引起的,好像我删除了它,然后就可以进行强制转换(但是这会使代码无用,因为我在该类中需要此代码)。如果我强制转换为UIViewController而不是DashboardViewController,则在下一行设置委托将失败,并出现“无法分配类型为“ UIViewController!”的值来键入类型为“ CBPeripheralDelegate?”(有意义))。

我完全不知道如何解决此问题。有人可以帮忙吗?

谢谢!

最佳答案

您应该用作?可选类型转换的运算符。下面的代码应该工作,

let destinationVC = segue.destinationViewController as? DashboardViewController

07-27 22:22