2013-02-07 15 views
17

पर फ्लिकर करने का कारण बनता है, मैंने थोड़ी देर में this code को छुआ नहीं है, इसलिए मुझे आश्चर्य है कि क्या कोई स्पष्ट चीजें हैं जो समस्या का कारण बनती हैं।UIAlertView lags, मंद प्रभाव को छोड़ देता है, फिर स्क्रीन को आईओएस 6.1

मैं एक खोज क्वेरी करने के बाद उपयोगकर्ता को UIAlertView प्रदर्शित कर रहा हूं। यह ठीक काम करता है जब तक कि मैंने आईओएस 6.1 (या इस विशेष आईपैड 2 पर उस मामले के लिए उपयोग कर रहा हूं) पर परीक्षण करना शुरू नहीं किया। अब यह UIAlertView को तब तक सामान्य के रूप में कार्य करता है और फिर स्क्रीन कुछ सेकंड के लिए मंद हो जाती है।

यह कुछ समस्या के समान नहीं था, जब तक कि मैंने देखा कि मैं अभी भी अपने ऐप में एक टेबल व्यू को स्पर्श कर सकता हूं जो स्क्रीन के झटके का कारण बनता है।

कोड मेरी GitHub पर है: ipwnstuff/shodan

+7

मेरा पहला अनुमान यह होगा कि आप इसे मुख्य धागे पर खारिज नहीं कर रहे हैं, बल्कि पृष्ठभूमि धागे में .... अगर ऐसा नहीं है, तो यदि आप कोड के किस हिस्से के साथ अधिक विशिष्ट हो सकते हैं आपने लिंक किया है समस्या पैदा कर रहा है, हम बेहतर मदद कर सकते हैं। – lnafziger

+0

मैं लाइन # 214 से जुड़ा हुआ हूं, जहां मैंने इस व्यवहार को 'विधि [' चेतावनी शो] कहा था। मुझे बिल्कुल यकीन नहीं है कि इस समस्या का कारण क्या है इसलिए मैंने उदाहरण के बजाए अपने कोड का लिंक क्यों पोस्ट किया। – erran

+1

आप इसे कहां खारिज कर रहे हैं जो समस्या पैदा कर रहा है? और क्या आप इसे मुख्य धागे पर खारिज कर रहे हैं? – lnafziger

उत्तर

23

सुनिश्चित करें कि आप प्रदर्शित कर रहे हैं (और यदि ऐसा है तो प्रोग्राम के रूप में कर खारिज) मुख्य थ्रेड पर चेतावनी, UIKit साथ अन्य सभी बातचीत के साथ करें।

dispatch_async(dispatch_get_main_queue(), ^{ 
    // Display/dismiss your alert 
}); 
+0

यह मेरी समस्या को हल करता है, लेकिन बदले में कीबोर्ड को लॉक करता है। मुझे अपने कोड को दोबारा सुधारने और सुविधा विधियों का उपयोग करने के बजाय थ्रेडिंग पर अधिक काम करने की आवश्यकता है: '[self performSelectorInBackground: @selector (doSomething) withObject: self]; '। – erran

+1

धन्यवाद आदमी :) !!! अपने उत्कृष्ट समाधान के लिए – Luda

+0

@Inafziger Thanx, क्या आप कृपया बता सकते हैं कि 'डिसमिस अलर्ट' से आपका क्या मतलब है? अलर्ट उपयोगकर्ता द्वारा खारिज कर रहे हैं और डिफ़ॉल्ट मामलों में हम 'डिसमिस' अलर्ट पर कोड नहीं लिखते हैं। उदाहरण के लिए, मेरे मामले में मैं उपरोक्त कोड को 'शो' अलर्ट पर उपयोग करता हूं, इसलिए: 'dispatch_async (dispatch_get_main_queue(),^{ // चेतावनी दिखाएँ }); – Malloc

7

lnafziger के जवाब का उपयोग करने के बजाय यह नकारने मैं मुख्य थ्रेड पर alertView से पता चला है: सबसे आसान तरीका है एक ब्लॉक का प्रयोग है। जिसने समस्या को भी ठीक किया।

[alert performSelectorOnMainThread:@selector(show) withObject:nil waitUntilDone:YES]; 
+0

आपको मुख्य धागे पर दोनों करने की ज़रूरत है! :-) – lnafziger