2016-06-14 69 views
0

我有一个委托/初始化问题,我似乎无法解决。基本上我有一个有几个视图控制器的故事板。在故事板里面有这个“视图控制器”,它由一个UITableview组成,它与一个DeviceListViewController类连接,以便它填充信息。在这里我已经宣布了以下协议:斯威夫特班上的代表团

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

和类本身里面我有一个这样的init方法(这可能是错误的,但我不知道我能在这一点上做些什么):

convenience init(aDelegate: DeviceListViewControllerDelegate) { 

    self.init() 

    self.delegate = aDelegate 
} 

然后有第二个类没有附加到任何称为BLEMainViewController的视图控制器。它应该是一个处理所有蓝牙操作的单身人士。这意味着我应该能够委托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没有连接到任何视图控制器(和它不应该IMO),但它需要被初始化为一个单为了处理所有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