2017-05-30 48 views
6

Próbuję użyć Parse LiveQueries. Używam tego Parse „Bootstrap”: „https://github.com/parse-community/parse-server
widzę dzienniki: info: Create new client: 1,
ale ja po prostu nie dostać aktualizację w zapytaniu chociaż mam subskrybowanych go. Nie dociera nawet do obsługi programu subscription.handle.Chmura parsetu - LiveQueries - Klient iOS nie działa

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 Swift):

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

Odpowiedz

3

Problem z tym kodem polega na umieszczeniu tego kodu w środku funkcji var subscription: Subscription<PFObject>?.

Ten obiekt musi mieć możliwość zachowania adresu pamięci, aby mógł odbierać zdarzenia.

Na przykład.

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

Jak widać z tego kodu, mam zmienne umieszczone poza definicji funkcji w zamówienie na Subscription „s adres pamięci mają być zachowane.

+0

Próbowałem tego również wcześniej, tak samo. – Etgar

+1

Aktualizacja: OK. Próbowałem ponownie, i miałeś rację. IDK, dlaczego nie działało, gdy próbowałem go kilka dni temu, być może popełniłem kolejny błąd. Wielkie dzięki! Yove zdobyłeś 50 punktów reputacji! :) EDYCJA: Mogę przyznać nagrodę tylko w 7 godzin – Etgar

+0

Nie ma za co. Dokumentacja jest dość brakuje, więc jest to coś, co nieporozumienie. Zwłaszcza od tego, jak działa gniazdo Firebase, ponieważ jego adres pamięci nadal funkcjonuje, nawet jeśli jest zadeklarowany w funkcji (używają one globalnego programu obsługi). –

-1

Musisz zarejestrować swoją klasę przed zapytania, jak:

Channel.registerSubclass() 
+0

Już to zrobiłem. – Etgar