我的應用程序有一個主視圖控制器,其中顯示來自藍牙設備的信息。要連接到藍牙設備,我需要連接到不同的視圖控制器以連接到所需的藍牙設備。然後,我訂閱每次藍牙設備發送數據時調用功能的藍牙設備。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 =自
那麼,你是否將接收VC設置爲代表? – Losiowaty
@Losiowaty您的第二個控制器沒有收到任何委託值並且沒有。您需要將代理從第一個控制器發送到第二個控制器。 –
@Losiowaty我沒有,所以我想這可能是缺少的。你能否給我舉一個例子,說明我應該怎麼做?從簡單的看,我認爲我需要在發送VC中獲得接收VC的實例,並將其設置爲委託,但我不太確定如何去做。謝謝! – lhbortho