2016-05-23 4 views
2

Ich habe einen Parse-Server mit LiveQuery auf Amazon EC2-Instanz, auf Port 9091, ohne Proxy konfiguriert, Firewall-Konfigurationen vorgenommen. Es scheint gut zu funktionieren, weil wir auf React getestet haben und http://www.websocket.org/echo.html verwendet haben, um zu sagen, dass die Verbindung erfolgreich war.Parse LiveQuery Abonnement erhält keine Ereignisse

Aber auf iOS konnte ich LiveQuery nicht arbeiten, obwohl das handleSubscribe in Ordnung zu sein scheint.

Ich habe einen einfachen Viewcontroller erstellt, es zu versuchen:

import UIKit 
import Parse 
import ParseLiveQuery 

class StatsViewController: UIViewController { 

    @IBAction func insertMessage(sender: AnyObject) { 
     let message = Message(); 
     message.author = PFUser.currentUser() 
     message.authorName = message.author?.username 
     message.text = "Hello: \(NSDate())" 
     message.roomName = "Test"; 

     message.saveInBackground(); 
    } 

    var myQuery: PFQuery { 
     return (Message.query()? 
      .whereKey("roomName", equalTo: "2") 
      .orderByAscending("createdAt"))! 
    } 

    var subscription: Subscription<Message>? = nil 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     //Registers the subclass 
     Message.registerSubclass(); 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    override func viewDidAppear(animated: Bool) { 

     //1) queries for messages, working. 
     myQuery.findObjectsInBackground().continueWithBlock() { res in 
      for msg in ((res.result as? [Message]))! { 
       print(msg); 
      } 
      return nil 
     } 

     //2) try to subscribe and receive any information from the server 
     subscription = myQuery.subscribe() 

     subscription!.handleEvent { query, event in 
      // Handle event 
      print("any event, please?"); //no events handled after creating a new message 
     } 

     subscription!.handle(Event.Created) { query, object in 
      // Called whenever an object was created 
      print("any creation, please?"); //no events handled after creating a new message 
     } 

     subscription!.handleError { (query, err) in 
      print("any error, please?"); //no errors handled 
     } 

     subscription!.handleSubscribe { query in 
      print("subscribed") 
     } 
    } 

} 

Ich habe auch versuchte das Abonnement des Code in dem Parse-Beispiel verwenden, wie in

func subscribeToUpdates() { 
    subscription = liveQueryClient 
     .subscribe(messagesQuery) 
     .handle(Event.Created) { _, message in 
      self.printMessage(message) 
    } 
} 

Gibt es einen Fehler oder etwas fehlt im Abonnementsprozess?

Danke!

+0

[Livequery Beispiel] (https://github.com/FredvanRijswijk/ParseLiveQuery) –

+0

Haben Sie jemals dieses Problem lösen? Ich habe das gleiche Problem. Vielen Dank! – Ward

+0

Es funktionierte, wenn ich registerSubclass() verwendete. Hast Du es versucht? –

Antwort

1

Versuchen Sie,

Message.registerSubclass(); 

vor Parse Konfiguration Setup

0

ich dies mit in Xcode 8.1 iOS 10.1 und es funktioniert.

let liveQueryClient = ParseLiveQuery.Client() 
var newMessageHandler: Subscription<Message>? 

newMessageHandler = liveQueryClient.subscribe(messagesQuery) 
      .handle(Event.created) { _, messageData in 
      print(messageData) 
} 
Verwandte Themen