2016-04-22 6 views
0

Swiftアプリケーションでは、 の設定でviewDidLoadでPubNubをインスタンス化し、チャンネルに参加します。しかし、私が に送信ボタンアクションを発射しない限り、 がチャンネルに全く参加していないように見えます(設定/チャンネルコードを送信ボタン で投げただけです) 。送信ボタン関数のコードは、 で、viewDidLoadのコードと同じですが、viewDidLoadのコードはまだ無視されている です。ユーザーが最初にメッセージを送信しない限り、私のアプリ上の現在のユーザーは メッセージをチャンネルに送信しないため、これはイライラしています。ここで 最初にメッセージを発行しない限り、PubNubメッセージを受信できません。

は、ビューコントローラのコードだ(私はそれが見する方が簡単ですので、多くのコードを削除し、あなたが思うなら、問題は、私はより投稿することができます別の場所に位置しています。):

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() 
     } 
    } 

EDIT:

ログを確認した後、実際のチャンネル名が返されても、 ""というチャンネルに参加しているために動作していないように見えます。print(channelName)なぜそれはチャネル名を取っていないのですか?正しいデータ型ではありませんか?あなたのコードで

答えて

1

は、私はあなたがラインで#7を宣言IDS変数の実際の値を設定して任意の場所が表示されていないスニペット。したがって、その変数に格納されているクライアントの使用価値:""
この変数はコントローラのライフサイクル中に変更され、適切な値に設定されてからsendButtonになると、ビューがロードされた時点では使用できません。

敬具、 セルゲイ助けを

+0

ありがとう!これは正しい軌道に乗った。何らかの理由で、私のIDがParseクエリで設定される前に、Pubnubクライアントが初期化されていました。私はinitコードを別の関数に移動し、idが作成された直後に関数を呼び出すようになりました。その部分は今働きます。しかし何らかの理由で、私のメッセージUUIDが正しく設定されていません。私の 'pnConfiguration.uuid'コードは無視されています。それは正しいUUIDを表示しますが、実際にメッセージを送信すると、クライアント関数のmessage.uuidは非常に異なる値を返します – winston

+0

メッセージを設定するために使用する別の方法がありますか? 'pnConfiguration.uuid'以外のコード? – winston

+0

@james _uuid_はデバッグ目的であり、受信側クライアント自体に関する情報を提供します。リモートメッセージ受信者にユーザーUUIDを認識させる必要がある場合は、メッセージペイロードの一部として送信する必要があります。 –

関連する問題