2014-09-24 6 views
7

मैं शुरुआती स्विफ्ट डेवलपर हूं। मैं इस मौसम ऐप से फंस गया हूं। मैं वेबसाइट डेटा डाउनलोड कर रहा हूं और फिर अपने लेबल में प्रदर्शित कर रहा हूं।लेबल अपडेट करना बहुत लंबा लगता है (तेज़)

दुर्भाग्यवश यह पूरी प्रक्रिया मेरे लेबल को अपडेट करने के लिए 10 सेकंड की तरह लगती है।

यह शायद नेटवर्क कनेक्शन की वजह से नहीं है क्योंकि कंसोल तुरंत अपडेट किया जाता है।

सुझावों के लिए धन्यवाद।

enter image description here

+0

में कोड के बिना, यह वाला को समझने के लिए जहाँ आपके समस्या हो सकती है मुश्किल हो रहा है। – Larme

+0

मैंने एक स्क्रीनशॉट जोड़ा – selez

+1

मुझे यकीन है कि आप गलत धागे पर कुछ कर रहे हैं। लेकिन आपको हमें कुछ कोड नमूना देना है ताकि हम आपकी मदद कर सकें ... –

उत्तर

12

क्या होता है कि कोड शायद एक माध्यमिक थ्रेड पर चलते है। आपके द्वारा किए गए किसी भी यूआई परिवर्तन मुख्य धागे पर किए जाने चाहिए। तो इसे आजमाएं:

dispatch_async(dispatch_get_main_queue()) { 
    // update label 
} 

यह तुरंत आपके लेबल को अपडेट करना चाहिए।

+1

मुझे इसे हराया! :) – Woodstock

+0

यह काम करता है, धन्यवाद! – selez

+0

इस समारोह को कहां खोजें? कृपया – Martian2049

6

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

स्विफ्ट 3:

अब स्विफ्ट 3 में GCD पुस्तकालय निम्नलिखित तरीके से की तरह अद्यतन किया गया था:

DispatchQueue.main.async(execute: { 
    // UI Updates 
}) 

मैं इस मदद आप की उम्मीद है।

+0

धन्यवाद आदमी यह है – Martian2049

0

उत्तर देने में देर हो सकती है लेकिन स्विफ्ट 3 तर्क में ऐसा होना चाहिए।

DispatchQueue.global(qos: .background).async { 
// Background Thread Or Service call Or DB fetch etc 
DispatchQueue.main.async { 
    // Run UI Updates and other logic 
}} 
0

आपके कोड में कई समस्याएं हैं।

सबसे पहले: यह मजबूत संदर्भ चक्र

फिक्स बंद में इस रखकर यह है।

[weak weakSelf = self] 

दूसरा: अद्यतन यूआई मुख्य थ्रेड

DispatchQueue.main.async { 
//Update UI 
weakSelf?.mReslut.text = "" 
} 
संबंधित मुद्दे