【问题标题】:swift , pass data from class to viewControllerswift ,将数据从类传递到 viewController
【发布时间】:2016-02-15 10:47:09
【问题描述】:

我从套接字获取数据

我将它存储在对象中 我使用NSNotificationCenter。还有另一种方法可以将这些数据从套接字类直接传递给查看控制器吗??

【问题讨论】:

  • 我假设您正在使用 ios 的 socket-io 客户端。如果您正在接收响应并将数据设置为响应块中的对象,那么将数据发布给所有侦听器不是很简单吗?你能详细说明你做了什么以及你在寻找什么吗?
  • 我想在从套接字接收到视图控制器时直接传递

标签: ios iphone swift socket.io


【解决方案1】:

你必须在情节提要中给 segue 一个标识符。(比如 vs_segue

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){....}

调用所有从当前 UIViewController 调用的 segue。所以标识符是为了区分不同的segues

然后使用这个代码:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "vs_segue" {
    var nextScene =  segue.destinationViewController as! VehicleDetailsTableViewController

    // Pass the selected object to the new view controller.
        nextScene.currentObjectInNextScreen = selectedObjectWhichYouHave
  }
}

在 var nextScene 之后放置一个断点,看看它是否在单击/更改 ViewController 时被触发。如果不是,则故事板中提供的标识符名称 u 必须与此处给出的不同。

谢谢

快乐编码。

【讨论】:

  • 如果我在某个视图控制器中并从套接字 io 接收数据,我想将此数据传递给视图控制器
【解决方案2】:

创建ResponseDelegate 协议

protocol ResponseDelegate {
    func didReceiveResponse(data:AnyObject?)
}

在您的套接字类中引用您的委托

class SocketClass {
    var responseDelegate:ResponseDelegate //This should be implemented and referred to your ViewController

    func getCurrentAmount() {
        [socket on:@"currentAmount" callback:^(NSArray* data, SocketAckEmitter* ack) {
           responseDelegate.didReceiveResponse(data)
        }
    }
 }

在你的ViewController

//Set your delegate here
socketClassObject.responseDelegate = self

func didReceiveResponse(data:AnyObject) {
       println("Recieved data:\(data)")
}

使用 NSNotificationsCentre

在您的视图控制器中

//Subscribe/Listen for the events
NSNotificationCenter.defaultCenter().addObserver(self, selector: "didReceiveResponse:", name:"CurrentAmountNotification", object: nil)

func didReceiveResponse(notification: NSNotification) {
       println("Recieved data:\(notification.userInfo)")
}

在你的 SocketClass 中

  class SocketClass {

    func getCurrentAmount() {
        [socket on:@"currentAmount" callback:^(NSArray* data, SocketAckEmitter* ack) {
           NSNotificationCenter.defaultCenter().postNotificationName("CurrentAmountNotification", object: nil, userInfo:data)
        }
    }
 }

【讨论】:

  • 我使用 NSNotificationsCenter 你的解决方案和 NSNotificationsCenter 有什么不同
  • 更新了我的答案以使用 NSNotifications 的方式,它更多的是一个设计决策,代表主要用于 1:1 的关系,而 NSNotifications 用于 1:N,这取决于你在寻找什么。如果多个类都在使用 SocketClass,则使用 NSNotifications。
猜你喜欢
  • 2017-11-08
  • 2016-01-05
  • 1970-01-01
  • 2015-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多