2017-04-05 62 views
0

我的應用程序有一個主視圖控制器,其中顯示來自藍牙設備的信息。要連接到藍牙設備,我需要連接到不同的視圖控制器以連接到所需的藍牙設備。然後,我訂閱每次藍牙設備發送數據時調用功能的藍牙設備。IOS Swift,代表在兩個視圖控制器之間進行通信

選擇要連接的設備後,我跳回到我想要顯示正在接收的數據的主屏幕。我可以看到,從輔助視圖控制器代碼中切換回主屏幕後,從藍牙設備接收數據包的事件仍然有效。

我的問題是,我想在我的第二個視圖控制器中接收到這個數據,並在每次收到它時將它發送到主視圖控制器。由於我不能跳回到輔助視圖控制器,因此我不能使用segues,因此我決定嘗試使用委託進行通信。

下面是我在第二個視圖控制器到目前爲止補充說,一個發送數據:前級

在二級視圖控制器:

protocol sendLatLonDelegate : class{ 
    func sendReceiveData(data:AnyObject?) 
} 

在我的輔助視圖的頂部與我的其他變量

weak var delegate:sendLatLonDelegate? 

時,我從我的藍牙設備接收數據包被調用的函數控制器類

delegate?.sendReceiveData(latFloat) 

這是我在我的主視圖控制器補充說,一個接收數據:

添加了這個類定義

class ViewController: UIViewController,sendLatLonDelegate { 

我的類中添加

func sendReceiveData(data:AnyObject?) {  
    print("received data") 
} 

我正在打印接收到的數據值,然後嘗試將其發送到主視圖控制器並可以正確看到它。雖然我看不到我收到的數據。

這可能是一個小鏈接,我沒有意識到我在兩者之間失蹤,但我似乎無法找到它是什麼。任何人有建議?非常感謝!

編輯:從推薦的答案,加入

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) 
{ 
    if (segue.identifier == "ConnectDeviceSegue") 
    { 
     let mapViewController = segue.destinationViewController as! ViewController 
     mapViewController.delegate = self 

    } 
} 

現在越來越類型的誤差值「的ViewController」沒有成員「代表」在行mapViewController.delegate =自

+0

那麼,你是否將接收VC設置爲代表? – Losiowaty

+0

@Losiowaty您的第二個控制器沒有收到任何委託值並且沒有。您需要將代理從第一個控制器發送到第二個控制器。 –

+0

@Losiowaty我沒有,所以我想這可能是缺少的。你能否給我舉一個例子,說明我應該怎麼做?從簡單的看,我認爲我需要在發送VC中獲得接收VC的實例,並將其設置爲委託,但我不太確定如何去做。謝謝! – lhbortho

回答

1

好了,從我們得到的意見,你沒有設置delegate財產,並從問題,我們知道你正在使用segues。爲了設置屬性你需要重寫你的ViewController(第一個)一個方法:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if (segue.identifier == "ConnectDeviceSegue") { 
     let mapViewController = segue.destinationViewController as! DeviceJoinViewController 
     mapViewController.delegate = self 

    } 
} 

這當然假定,那你的第二個VC被命名爲SecondViewController - 如果不是,則相應更改的一部分。

+0

感謝您的回答,我在最初的問題中編輯了代碼,我相信我正在使用不同版本的swift,因此它與您的答案略有不同。我目前正在收到錯誤「類型」ViewController「的值沒有成員'委託'」 – lhbortho

+0

看來你錯了 - 你需要將它轉換爲第二個視圖控制器的類型,那個具有'代表'財產。從我從你的代碼中收集和理解的內容中,你將它投射到第一個視圖控制器。 – Losiowaty

+0

發送VC名爲DeviceJoinViewController,接收者名爲ViewController。我使用了相同的函數來訪問ViewController中的變量,它的工作原理並不能確定這是問題所在。 (這也許是我對你的答案的理解) – lhbortho

相關問題