2012-11-14 10 views
5

को रीफ्रेश करते समय UITableView 'अटक गया' मुझे UIRefreshControl को लागू करने में कोई समस्या हो रही है - उस समय जब आप नीचे खींचते हैं, तो 'ब्लॉब' पूरी तरह से ठीक काम करता है और रीफ्रेश स्पिनर ठीक काम करता है, लेकिन tableView तक स्क्रॉल नहीं करता है ताज़ा करते समय स्पिनर। इसके बजाय, यह रहता है जहां यह था जब तक ताज़ा पूरा हो गया है, जिस पर यह स्क्रीन के शीर्ष पर लौट आता इंगित करते हैं,UIRefreshControl:

कोड कि ताज़ा करता है:

- (void)viewDidLoad { 
    self.refreshControl = [[UIRefreshControl alloc] init]; 
    [self.refreshControl addTarget:self action:@selector(refreshView:)forControlEvents:UIControlEventValueChanged]; 
} 

- (void)refreshView:(UIRefreshControl *)refresh { 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     (...code to get new data here...) 
     [self.refreshControl endRefreshing]; 
    } 
} 

मैंने पाया कि dispatch_async बिना, यहां तक ​​कि ताज़ा स्पिनर काम नहीं करता है - और जो टुकड़ा नीचे खींचा गया था वह सिर्फ सफेद

क्या किसी के पास कोई संकेत है कि मैं गलत क्या कर सकता हूं? सभी कार्यान्वयन उदाहरण मैंने पाया कि मैं क्या कर रहा हूँ मैच के लिए लगता है, और मैं एपीआई डॉक्स कि सुझाव है कि मैं बाहर

+0

पर "अटक गया" लेकिन मैंने ** आपको ** मुख्य थ्रेड से UIKit को कॉल करने के लिए कहा था! –

उत्तर

16

कुछ भी आप

- (void)refreshView:(UIRefreshControl *)refresh { 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     // (...code to get new data here...) 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      //any UI refresh 
      [self.refreshControl endRefreshing]; 
     }); 
    }); 
} 
निम्नलिखित को बदल सकते हैं याद कर रहा हूँ में कुछ भी नहीं मिला है

-refreshView: मुख्य धागे पर कॉल किया जाएगा, और सभी यूआई अपडेट मुख्य धागे का उपयोग कर रहे हैं। तो यदि आप "नया डेटा प्राप्त करने के लिए कोड" के लिए मुख्य धागे का उपयोग करते हैं तो यह

+0

ऐसा लगता है कि पूरी तरह से काम किया है - मुझे पुराने डेटा का उपयोग करके http://stackoverflow.com/questions/10605038/index-17-beyond-bounds-for-empty-array-tableview जैसे फिक्स को भी कार्यान्वित करना था, indexPath.row मेरे डेटा सरणी में नहीं है - जो आईओएस देव के लिए नया है मुझे यकीन है कि मैं समझूंगा कि समय में क्यों :) धन्यवाद! – thatdamnqa

+0

जब आप शुरू करते हैं तो जीसीडी मुश्किल लगता है। यह बहुत अच्छी कतार और थ्रेडिंग फ्रेमवर्क है, आप आनंद लेंगे। खुशी है कि यह काम किया। –