gpt4 book ai didi

ios - Swift 和 Socket.io : Event doesn't run anymore when re-open a controller

转载 作者:行者123 更新时间:2023-11-29 02:01:32 25 4
gpt4 key购买 nike

我是 Swift 和 Socket.io 的初学者。我正在使用的 Swift 的 socket.io 库是 https://github.com/nuclearace/Socket.IO-Client-Swift

为了在多个 Controller 中使用 1 个 socket.io 连接,我在 Singleton_SocketManager.swift 中使用带有以下代码的 Singleton:

import Foundation

class Singleton_SocketManager {
static let sharedInstance = Singleton_SocketManager()
let socket = SocketIOClient(socketURL: "localhost:3000")
var currentController = ""
var loadedHander = [String: Bool]()
var currentRoomId = 0

init() {
loadedHander["ViewController"] = false
loadedHander["NextViewController"] = false
}
}

let sharedSocket = Singleton_SocketManager()

为了在每个 Controller 中添加事件处理程序,我在 viewDidLoad() 中调用了 addHandlers() 函数,并调用了 addHandlers() 的代码:

对于 View Controller :

func addHandlers() {
if (sharedSocket.loadedHander["ViewController"]!) {
return;
} else {
sharedSocket.loadedHander["ViewController"] = true
}

sharedSocket.socket.on("eventInViewController1") {[weak self] data, ack in
println("View Controller: Event 1")
}
}

对于 NextViewController:

func addHandlers() {
if (sharedSocket.loadedHander["NextViewController"]!) {
return;
} else {
sharedSocket.loadedHander["NextViewController"] = true
}

sharedSocket.socket.on("eventInNextViewController1") {[weak self] data, ack in
println("NextViewController: Event 1")
}
}

他们第一次运行得很好。但是,如果我必须使用此代码更改 Controller :

let storyBoard = self.storyboard
let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("NextViewController") as! NextViewController
self.presentViewController(nextViewController, animated: false, completion: nil)

并使用相同的代码返回到 ViewController,旧的事件处理程序将不会运行。我知道我可以通过删除检查和标记“sharedSocket.loadedHander”的代码来运行它,但如果我这样做,所有事件将运行两次,如果我转到 NextViewController 并再次返回 ViewController,则所有事件将运行三次。

我尝试对这个问题进行了大量研究,但找不到任何解决方案。如果您以前使用过 Swift 或 Objective-C 和 Socket.io 库并解决了这个问题,请帮助我。

非常感谢您的阅读!

最佳答案

在执行到下一个 ViewController 的 segue 之前尝试断开与第一个 ViewController 的连接。然后,在第二个 ViewController 中重新连接。

此外,您可能需要全局声明socket 常量。

关于ios - Swift 和 Socket.io : Event doesn't run anymore when re-open a controller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30317127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com