योनेल के समाधान में कुछ हद तक प्रतिलिपि बनाने और इसे अच्छा कहने के बाद मुझे एहसास हुआ कि performSelectorOnMainThread:withObject:waitUntilDone:
पर कॉल करने से लक्षण ठीक हो गया है, लेकिन समस्या नहीं है। बड़ी समस्या यह है कि आप अभी भी एसिंक्रोनस या पृष्ठभूमि थ्रेड के संदर्भ में यूआई अपडेट कर रहे हैं।
dispatch_queue_t queue = dispatch_queue_create("com.kyleclegg.myqueue", NULL);
dispatch_async(queue, ^{
// Make API call
// Retrieve data, parse JSON, update local properties
// Make a call to reload table data
});
जब यह इस तरह दिखना चाहिए:
dispatch_queue_t queue = dispatch_queue_create("com.kyleclegg.myqueue", NULL);
dispatch_async(queue, ^{
// Make API call
// Retrieve data, parse JSON, update local properties
dispatch_async(dispatch_get_main_queue(), ^{
// Now make the call to reload data and make any other UI updates
[self.tableView reloadData]
});
});
केवल बात आपको बस इतना करना कॉल [self.tableView reloadData]
है यह शायद करने के लिए ठीक है, तो
यह वही मेरी कोड की तरह दिखाई देता है performSelectorOnMainThread:withObject:waitUntilDone:
का उपयोग करें क्योंकि यह एक ही लक्ष्य पूरा करता है, लेकिन आपको यह भी समझना चाहिए कि बड़ी तस्वीर में क्या हो रहा है। इसके अलावा यदि आप तालिका को फिर से लोड करने से अधिक यूआई काम कर रहे हैं तो उस कोड को मुख्य कतार पर भी जाना चाहिए।
संदर्भ: A concise example जीसीडी का उपयोग करने और पृष्ठभूमि बनाम मुख्य धागे का प्रबंधन करने के लिए।
स्रोत
2014-03-05 23:44:57
आम तौर पर reloadData विधि तालिकादृश्य दृश्य को रीफ्रेश करें। क्या आप अपने TableViewController कोड का नमूना डाल सकते हैं? –