2016-07-16 10 views
7

मैं सिर्फ फायरबेस डेटा पुनर्प्राप्त करने के बारे में पूछना चाहता हूं। मैं फायरबेस को डेटा को कैसे पुनर्प्राप्त कर सकता हूं? मुझे कोई पूरा करने वाला हैंडलर नहीं दिख रहा है। मैं इस फ़ायरबेस डेटा को पुनर्प्राप्त करने के बाद कुछ फ़ंक्शन कॉल करना चाहता हूं। मैं कैसे संभाल सकता हूँ ???फ़ायरबेस ने डेटा पुनर्प्राप्त करने के बाद मेरा कोड कैसे जान सकता है?

DataService.ds.POST_REF.queryOrderedByChild("created_at").observeEventType(.ChildAdded, withBlock: { snapshot in 
     if let postDict = snapshot.value as? Dictionary<String, AnyObject> { 
      let postKey = snapshot.key 
      let post = Post(postKey: postKey, dictionary: postDict) 
      self.posts.append(post) 
     } 
    }) 

उत्तर

4

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

यदि आपको वास्तव में बच्चे को जोड़ा जाने की आवश्यकता है और समाप्त होने पर अधिसूचित हो, तो आप टाइमर सेट कर सकते हैं। मुझे तेज़ी से पता नहीं है, लेकिन यहां तर्क है।

  1. अपना 'बच्चा जोड़ा' ईवेंट सेट अप करें।
  2. 500ms में कुछ समाप्त लोडिंग() फ़ंक्शन को कॉल करने के लिए टाइमर सेट करें।
  3. हर बार जब 'बाल जोड़ा' ईवेंट ट्रिगर होता है, तो चरण दो में टाइमर सेट को नष्ट कर दें और दूसरा बनाएं (यानी, इसे एक और 500ms बढ़ाएं)।

जब नया डेटा आना बंद हो जाता है, तो टाइमर विस्तारित हो जाएगा और फिनिश किए गए लोडिंग() को बाद में 500ms कहा जाएगा।

500ms बस एक निर्मित संख्या है, जो कुछ भी सूट का उपयोग करें।

0

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

आप childAdded के लिए एक अलग क्वेरी बना सकते हैं और फिर वहाँ कुछ भी आप जब एक नई पोस्ट जोड़ दिया गया है

2

एक समारोह जो इतनी तरह एक पूरा होने हैंडलर है में कोड के पूरे ब्लॉक लिखें क्या करना चाहते हैं:

func aMethod(completion: (Bool) ->()){ 
DataService.ds.POST_REF.queryOrderedByChild("created_at").observeEventType(.ChildAdded, withBlock: { snapshot in 
     if let postDict = snapshot.value as? Dictionary<String, AnyObject> { 
      let postKey = snapshot.key 
      let post = Post(postKey: postKey, dictionary: postDict) 
      self.posts.append(post) 
     } 
     completion(true) 
    }) 
} 

तो यह कहीं न कहीं तो जैसे फोन:

aMethod { success in 
guard success == true else { 
//Do something if some error occured while retreiving data from firebase 
return 
} 
//Do something if everything went well. 
. 
. 
. 
+0

यह .childAdded स्नैपशॉट के लिए काम नहीं करता है ... –

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

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