- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 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/
我是一名优秀的程序员,十分优秀!