2016-06-14 2 views
0

У меня проблема с делегацией/инициализацией, которую я не могу решить. В основном у меня есть раскадровка с несколькими контроллерами View. Внутри раскадровки есть этот «Контроллер просмотра», который состоит из UITableview, который я связал с классом DeviceListViewController, чтобы он заполнял эту информацию. Вот здесь я объявил следующий протокол:Делегирование класса в Swift

protocol DeviceListViewControllerDelegate: UIAlertViewDelegate { 
    var connectionMode:ConnectionMode { get } 
    func connectPeripheral(peripheral:CBPeripheral, mode:ConnectionMode) 
    func stopScan() 
    func startScan() 
} 

и внутри самого класса У меня есть метод инициализации, как это (что, вероятно, неправильно, но я не знаю, что еще я мог сделать в этой точке):

convenience init(aDelegate: DeviceListViewControllerDelegate) { 

    self.init() 

    self.delegate = aDelegate 
} 

Тогда есть этот второй класс, который не подключен к любому контроллеру вида BLEMainViewController. Это должен быть singleton, обрабатывающий все действия bluetooth. Это означает, что я должен иметь возможность делегировать некоторые вещи между DevicelistViewController и BLEMainViewController.

В BLEMainViewController я унаследовал DeviceListViewControllerDelegate:

class BLEMainViewController: NSObject, DeviceListViewControllerDelegate { 

    var deviceListViewController:DeviceListViewController! 
    var delegate: BLEMainViewControllerDelegate? 
    static let sharedInstance = BLEMainViewController() 

} 

override init() { 
    super.init() 
    //  deviceListViewController.delegate = self 
    deviceListViewController = DeviceListViewController(aDelegate: self) 
} 

Проблема заключается в том, что BLEMainViewController не привязана к какому-либо View Controller (и она не должна ИМО), но она должна быть инициализирована как синглтон в чтобы обрабатывать все действия BLE. Может ли кто-нибудь указать мне в правильном направлении (предпочтительно с примером) о том, как обойти это?

Setup

+0

так почему вы сделали это вид контроллера? – Wain

+0

Ну, мне нужно было сделать это, чтобы показать оповещения и т. Д., Но я просто подумал, что на самом деле это действительно глупо делать:/ – Reshad

+0

Я сделал обычный класс этого сейчас. – Reshad

ответ

0

Я думаю, что вы просто использовали неправильный код архитектуры.

BLEManager - это общий экземпляр, вы можете называть его повсюду, задавать его свойства и вызывать его методы. Его можно делегировать представление-контроллер с любыми предопределять события вы будете добавлять к своему протоколу и обеспечить надлежащее выполнение

Вот код, надеюсь, что это помогает

protocol BLEManagerDelegate{ 
    func bleManagerDidStartScan(manager : BLEManager) 
} 

class BLEManager: NSObject { 
    static let sharedInstance = BLEManager() 

    var delegate: BLEManagerDelegate? 
    var devices : [AnyObject] = [] 

    func startScan(){ 
     delegate?.bleManagerDidStartScan(self) 
     //do what ever 
    } 

    func stopScan(){ 

    } 
} 
+0

Итак, я получил DeviceListViewController и его протокол. То, что должен сделать мой BLEManager, - это обработать эти методы протокола. (поэтому мне нужно делегировать их BLEManager) Но я не могу понять из вашего кода, как правильно установить делегирование – Reshad

Смежные вопросы