2017-05-30 24 views
6

我正在嘗試使用Parse LiveQueries。 我用這個解析「引導」:「https://github.com/parse-community/parse-server」,
我可以看到日誌:info: Create new client: 1
但我只是雖然我已經訂閱但沒有得到查詢更新。它甚至沒有達到subscription.handle的處理程序。解析雲 - LiveQueries - iOS客戶端不起作用

config.json

{ 
    "appId": "", 
    "masterKey": "", 
    "appName": "", 
    "cloud": "./cloud/main", 
    "databaseURI": "", 
    "publicServerURL": "",  

    // Relevant 
    "startLiveQueryServer": true, 
    "liveQuery": { 
    "classNames": ["Channel"] 
    }, 
} 

AppDelegate.swift

// Initialize Parse. 
let configuration = ParseClientConfiguration { 
    $0.applicationId = self.PARSE_APP_ID 
    $0.server = self.PARSE_SERVER 
} 
Parse.initialize(with: configuration) 

AppDelegate.liveQueryClient = ParseLiveQuery.Client() 

The Subscription Code(iOS版雨燕):

public static func listenSubscribedChannels(handler: @escaping (_ channel: Channel) -> Void) { 
    var subscription: Subscription<PFObject>? 

    let query: PFQuery<PFObject> = PFQuery(className: "Channel").whereKey("subscribers", containedIn: [PFUser.current()!.objectId]) 

    subscription = AppDelegate.liveQueryClient!.subscribe(query).handle(Event.updated) { _, channel in 
     handler(channel) 
    } 
} 

回答

3

該代碼的問題在於,您將此代碼var subscription: Subscription<PFObject>?置於該函數內部。

該對象必須能夠保留其內存地址以便接收事件。

例如。

class SomeClass { 
    var objects: [PFObject] = [] 
    var subscription: Subscription<PFObject>? 
    var subscriber: ParseLiveQuery.Client! 
    let query = PFQuery(className: "Locations") 

    func startListener() { 
     // initialize the client 
     subscriber = ParseLiveQuery.Client() 

     // initialize subscriber and start subscription 
     subscription = subscriber.subscribe(conversationQuery) 

     // handle the event listenrs. 
     _ = subscription?.handleEvent({ (_, event) in 
      switch event { 
      case .created(let object): 
       self.objects.append(object) 
       // do stuff 

      default: 
       break // do other stuff or do nothing 
      } 
     }) 
    } 
} 

正如你可以從這個代碼中看到的,我已經放在函數定義之外的變量,以使Subscription的內存地址被保留。

+0

我以前也試過這個,同樣的事情。 – Etgar

+1

更新:好的我剛剛嘗試過,並且你是對的。 IDK爲什麼它在我前幾天嘗試時不起作用,可能又犯了一個錯誤。 非常感謝!你已經贏得了50分的聲​​譽! :) 編輯:我只能在7小時內給您獎賞 – Etgar

+0

歡迎您。文檔很缺乏,所以這是最誤解的。尤其是Firebase的套接字是如何工作的,因爲即使在函數內聲明,它的內存地址仍然存在(它們使用全局處理程序,這就是爲什麼) –

-1

你必須查詢之前登記類,如:

Channel.registerSubclass() 
+0

我已經做到了。 – Etgar