0

Я только что начал переводить свое приложение в Swift, я хочу, чтобы CBCentralManager.delegate был настроен на другой контроллер представления (тот, на который наводится навигационный контроллер).CoreBluetooth установил центральный делегат на другой контроллер представления

Я пытаюсь сделать то же самое с помощью следующего кода:

let viewCont = self.storyboard!.instantiateViewControllerWithIdentifier("mainView") 
self.navigationController?.pushViewController(viewCont, animated: true) 
manager.delegate = viewCont 

переменная менеджер является экземпляром CBCentralManager и установки делегата viewCont вызывает следующую ошибку:

"Cannot assign value of type 'UIViewController' to type 'CBCentralManagerDelegate?'" 

декларации за вид Контроллер:

class MainViewController: UIViewController, CBCentralManagerDelegate 

Как я могу решить то же самое?

+0

Зачем вам это нужно? Если вы хотите, чтобы эти методы делегатов вызывались в вашем другом контроллере представлений, тогда объявите CBCentralManager и инициализируйте там. – iOSEnthusiatic

ответ

1

Вам необходимо отключить контроллер вида, который вы получаете от instantiateViewControllerWithIdentifier. Без смиренных, все знает компилятор, что у вас есть UIViewController

let viewCont = self.storyboard!.instantiateViewControllerWithIdentifier("mainView") as! MainViewController 
self.navigationController?.pushViewController(viewCont, animated: true) 
manager.delegate = viewCont 

После того как вы смиренная, используя as! то компилятор знает, что он имеет MainViewController и поскольку этот класс также CBCentralManagerDelegate доволен.