除非我先发布消息,否则无法接收 PubNub 消息
Can't receive PubNub message unless I publish a message first
在我的 Swift 应用程序中,我在 viewDidLoad 上用
正确配置后加入频道。不过,看起来好像
根本不加入频道,除非我触发发送按钮操作
发送消息(我在“发送”按钮中输入了 config/join 频道代码
只是为了看看它是否会起作用)。发送按钮函数中的代码是
与viewDidLoad中的代码相同,但是viewDidLoad中的代码是
仍然被忽略。这令人沮丧,因为我的应用程序的当前用户不会
接收发送到频道的消息,除非用户先发送消息。
这是视图控制器中的代码(我删除了很多代码以便于查看。如果您认为问题出在其他地方,我可以 post 更多):
class MessageViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate, PNObjectEventListener{
var pubNub: PubNub!
var pnConfiguration: PNConfiguration!
var ids: String = ""
@IBAction func sendButton(sender: UIButton) {
//create Pubnub channel
pnConfiguration = PNConfiguration(publishKey: "key", subscribeKey: "key")
pnConfiguration.uuid = currentUser.objectId!
print(pnConfiguration.uuid)
pubNub = PubNub.clientWithConfiguration(pnConfiguration)
let channelName = ids as String
let channelArray: [String] = [channelName]
pubNub.subscribeToChannels(channelArray, withPresence: true)
pubNub.publish(self.messageText.text!, toChannel: channelName, compressed: false, withCompletion: nil)
pubNub.addListener(self)
self.messageText.enabled = true
self.view.userInteractionEnabled = true
dispatch_async(dispatch_get_main_queue()) {
self.messageText.text = ""
self.messageTableView.reloadData()
}
}
override func viewDidLoad() {
super.viewDidLoad()
//Query that sets self.ids = user1.objectId! + user2.objectId!
//set Pubnub config
pnConfiguration = PNConfiguration(publishKey: "key", subscribeKey: "key")
pubNub = PubNub.clientWithConfiguration(pnConfiguration)
pnConfiguration.uuid = currentUser.objectId!
//create channel
let channelName = ids as String
print(channelName)
let channelArray: [String] = [channelName]
pubNub.subscribeToChannels(channelArray, withPresence: true)
pubNub.addListener(self)
dispatch_async(dispatch_get_main_queue()) {
self.messageTableView.reloadData()
}
}
编辑:
查看日志后,它似乎无法正常工作的原因是因为它正在加入一个名为“”的频道,即使 print(channelName)
returns 是真实的频道名称。为什么不使用频道名称?是不是数据类型不对?
在您的代码片段中,我没有看到您在第 #7[=20= 行声明的 ids 变量设置实际值的任何地方].因此客户端使用存储在该变量中的值:"""
我认为这个变量在控制器生命周期中发生了变化,并在您点击 sendButton 之前设置为正确的值,但在加载视图时不可用。
此致,
谢尔盖
在我的 Swift 应用程序中,我在 viewDidLoad 上用 正确配置后加入频道。不过,看起来好像 根本不加入频道,除非我触发发送按钮操作 发送消息(我在“发送”按钮中输入了 config/join 频道代码 只是为了看看它是否会起作用)。发送按钮函数中的代码是 与viewDidLoad中的代码相同,但是viewDidLoad中的代码是 仍然被忽略。这令人沮丧,因为我的应用程序的当前用户不会 接收发送到频道的消息,除非用户先发送消息。
这是视图控制器中的代码(我删除了很多代码以便于查看。如果您认为问题出在其他地方,我可以 post 更多):
class MessageViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate, PNObjectEventListener{
var pubNub: PubNub!
var pnConfiguration: PNConfiguration!
var ids: String = ""
@IBAction func sendButton(sender: UIButton) {
//create Pubnub channel
pnConfiguration = PNConfiguration(publishKey: "key", subscribeKey: "key")
pnConfiguration.uuid = currentUser.objectId!
print(pnConfiguration.uuid)
pubNub = PubNub.clientWithConfiguration(pnConfiguration)
let channelName = ids as String
let channelArray: [String] = [channelName]
pubNub.subscribeToChannels(channelArray, withPresence: true)
pubNub.publish(self.messageText.text!, toChannel: channelName, compressed: false, withCompletion: nil)
pubNub.addListener(self)
self.messageText.enabled = true
self.view.userInteractionEnabled = true
dispatch_async(dispatch_get_main_queue()) {
self.messageText.text = ""
self.messageTableView.reloadData()
}
}
override func viewDidLoad() {
super.viewDidLoad()
//Query that sets self.ids = user1.objectId! + user2.objectId!
//set Pubnub config
pnConfiguration = PNConfiguration(publishKey: "key", subscribeKey: "key")
pubNub = PubNub.clientWithConfiguration(pnConfiguration)
pnConfiguration.uuid = currentUser.objectId!
//create channel
let channelName = ids as String
print(channelName)
let channelArray: [String] = [channelName]
pubNub.subscribeToChannels(channelArray, withPresence: true)
pubNub.addListener(self)
dispatch_async(dispatch_get_main_queue()) {
self.messageTableView.reloadData()
}
}
编辑:
查看日志后,它似乎无法正常工作的原因是因为它正在加入一个名为“”的频道,即使 print(channelName)
returns 是真实的频道名称。为什么不使用频道名称?是不是数据类型不对?
在您的代码片段中,我没有看到您在第 #7[=20= 行声明的 ids 变量设置实际值的任何地方].因此客户端使用存储在该变量中的值:"""
我认为这个变量在控制器生命周期中发生了变化,并在您点击 sendButton 之前设置为正确的值,但在加载视图时不可用。
此致, 谢尔盖