2016-06-14 4 views
0

해결할 수없는 위임/초기화 문제가 있습니다. 기본적으로 몇 가지 View 컨트롤러가있는 스토리 보드가 있습니다. 스토리 보드 내부에는 정보를 채우도록 DeviceListViewController 클래스와 연결된 UITableview로 구성된이 "View Controller"가 있습니다. 여기에서 나는 다음과 같은 프로토콜을 선언 한 :Swift의 클래스 위임

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 사이에 몇 가지 사항을 위임 할 수 있어야합니다.

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해야한다)하지만 싱글 같이 초기화 할 필요가 있다는 것입니다 : 나는 DeviceListViewControllerDelegate을 상속 한 BLEMainViewController에서

모든 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