我的应用程序有一个主视图控制器,其中显示来自蓝牙设备的信息。要连接到蓝牙设备,我需要连接到不同的视图控制器以连接到所需的蓝牙设备。然后,我订阅每次蓝牙设备发送数据时调用功能的蓝牙设备。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