2011-10-27 14 views
7

पर भेजने की आवश्यकता है, मुझे एक अलग थ्रेड मिला है जो एक UIView ऑब्जेक्ट बनाता है, इसे UITableView के डेटा स्रोत में डालता है और फिर UITableView पर reloadData को कॉल करता है। हालांकि, चूंकि यह एक अलग धागा है, यह सीधे रीलोडडाटा को कॉल नहीं कर सकता है, इसे मुख्यधारा करने की आवश्यकता है ... लेकिन आप इसे करने के लिए मुख्यधारा को कैसे बताते हैं?आईओएस - अन्य थ्रेड को रीडलोडडेटा को मुख्यधारा

धन्यवाद

उत्तर

20
[self.tableView performSelectorOnMainThread:@selector(reloadData) 
           withObject:nil 
           waitUntilDone:NO]; 
+1

मैं इस लाइन की प्रतिलिपि बनाने के लिए यहां आया :)। टीक –

1

कैसे कुछ इस तरह के बारे में? (संकलन नहीं हो सकता है, मैं इसे पूरा लिखने रहा हूँ)

- (void) callReloadData 
{ 
    if ([NSThread isMainThread]) { 
     @synchronized (self.tableView) { 
      [self.tableView reloadData]; 
     } 
    } else { 
     [self performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES]; 
    } 
} 
+1

'प्रदर्शन चयनकर्ताऑनमेन थ्रेड: 'अगर प्रतीक्षा करें नहीं:' हाँ है, तो यह कोड निरर्थक होगा। (मुझे नहीं पता कि आपने '@ सिंक्रनाइज़ किए गए 'ब्लॉक में फेंकना क्यों चुना है।) – titaniumdecoy

7

आप प्रेषण async उपयोग कर सकते हैं, इस विधि आप उपयोग कर तरीकों के बजाय इन-लाइन कोड के ब्लॉक करने के लिए कार्यकर्ता धागा मार्शल करने के लिए अनुमति देता है performSelectorOnMainThread:

dispatch_async(dispatch_get_main_queue(), ^{ 
    [self.tableview reloadData]; 
});' 
संबंधित मुद्दे