2017-04-05 40 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

相关问题