2017-05-30 12 views
6

मैं पार्स लाइवक्व्यूरीज़ का उपयोग करने की कोशिश कर रहा हूं। मैं इस पार्स "बूटस्ट्रैप" का उपयोग करें: "https://github.com/parse-community/parse-server",
मैं लॉग देख सकते हैं: info: Create new client: 1,
लेकिन मैं सिर्फ क्वेरी में अद्यतन हालांकि मैं यह सदस्यता ली है नहीं मिलता है। यह subscription.handle के हैंडलर तक भी नहीं पहुंचता है।पार्स क्लाउड - लाइवक्विरीज़ - आईओएस क्लाइंट काम नहीं करता

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 (आईओएस स्विफ्ट):

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

अद्यतन: ठीक है मैंने अभी कोशिश की है, और आप सही थे। आईडीके कुछ दिनों पहले मैंने कोशिश की जब यह काम नहीं किया, शायद एक और गलती की। बहुत बहुत धन्यवाद! आपने प्रतिष्ठा के 50 अंक अर्जित किए हैं! :) संपादित करें: मैं केवल 7 घंटे – Etgar

+0

में आपको बक्षीस का पुरस्कार दे सकता हूं आपका स्वागत है। दस्तावेज़ीकरण में काफी कमी है इसलिए यह कुछ गलतफहमी है। विशेष रूप से जब फ़ायरबेस की सॉकेट कैसे काम करती है, तब भी इसके मेमोरी एड्रेस के रूप में काम करता है, भले ही किसी फ़ंक्शन के अंदर घोषित किया गया हो, (वे वैश्विक हैंडलर का उपयोग करते हैं) –

-1

आप क्वेरी से पहले अपने वर्ग रजिस्टर करने के लिए है की तरह:

+०१२३५१६४१०
Channel.registerSubclass() 
+0

मैंने इसे पहले से ही कर लिया है। – Etgar

संबंधित मुद्दे