2011-06-14 11 views
6

मैं डिस्क पर संग्रहीत करने के लिए छोटी टाइल छवियां बना रहा हूं और उपयोगकर्ता को प्रदर्शित किया गया हूं।पृष्ठभूमि धागे पर एक छवि के लिए UIVIew प्रस्तुत करने के लिए सुरक्षित तरीका?

  1. एक ViewController कि यूआई मैं परदे पर
  2. ViewController से दृश्य प्राप्त करें और डिस्क पर
  3. यह सहेजें यह से एक छवि प्रस्तुत करना दिखाना चाहते हैं का प्रतिनिधित्व करता है बनाएँ और: यहाँ ऐसा करने के लिए अपने मौजूदा प्रक्रिया है इसे बाद में ऑनस्क्रीन प्रदर्शित करें

जब मैं व्यू कंट्रोलर के दृश्य तक पहुंचने का प्रयास करता हूं तो मैं क्रैश हो रहा हूं। जब मैंने इस ऑनलाइन शोध करने की कोशिश की, तो मुझे पृष्ठभूमि में दृश्य बनाने के लिए सुरक्षित है या नहीं, इस पर विवादित परिणाम मिल रहे हैं। मैं पढ़ रहा हूं कि UIGraphicsGetCurrentContext कॉल थ्रेड सुरक्षित होना चाहिए, लेकिन शायद पृष्ठभूमि थ्रेड पर UIView तक नहीं पहुंच रहा है? मैं आईओएस 4 और उसके बाद के संस्करण के लिए ऐप लिख रहा हूं। यहाँ कोड मैं का उपयोग कर रहा है (टाइल ViewController है):

CGSize size = CGSizeMake(20.0f, 30.0f); 
UIGraphicsBeginImageContext(size); 
[tile.view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();   
UIGraphicsEndImageContext(); 

दुर्घटना तब होता है जब टाइल (EXC_BAD_ACCESS) पर .view संपत्ति का उपयोग करने की कोशिश कर रहा। यूआई को लॉक करने से रोकने के लिए पृष्ठभूमि में एक छवि को दृश्य प्रस्तुत करना है क्योंकि प्रक्रिया करने के लिए बहुत सारी टाइलें हैं।

क्या ऐसा करने का कोई सुरक्षित तरीका है?

+1

क्या आपको कभी इसका कोई अच्छा समाधान मिला है? –

+0

मैं एक ही दुर्घटना में भाग गया। [ऐप्पल के दस्तावेज़ीकरण] के आधार पर (http://developer.apple.com/library/ios/#qa/qa1714/_index.html), 'renderInContext' को एक अलग थ्रेड पर इस्तेमाल किया जा सकता है। हालांकि, हकीकत में, यह रहस्यमय रूप से दुर्घटनाग्रस्त हो जाता है। क्या किसी को इस समस्या का समाधान मिला? – Howy

+0

क्या आपको इसके लिए कोई समाधान मिला, मार्क? –

उत्तर

2

मैंने कभी भी आपके द्वारा वर्णित प्रयासों की कोशिश नहीं की है, और मुझे बुरी खबरों के वाहक होने की इच्छा नहीं है, लेकिन Apple's documentation से लिया गया है।

नोट: अधिकांश भाग के लिए, UIKit कक्षाएं केवल एक आवेदन के मुख्य धागे से इस्तेमाल किया जाना चाहिए। यह UIResponder से व्युत्पन्न कक्षाओं के लिए विशेष रूप से सच है या इसमें शामिल है जो आपके एप्लिकेशन के उपयोगकर्ता इंटरफ़ेस को किसी भी तरह से जोड़ता है।

बेशक, वे आसानी से "अधिकांश भाग के लिए" कहते हैं, ताकि कुछ विग्गल रूम छोड़ दें।

+0

बिना किसी बदलाव के दृश्य को पास करने के बारे में क्या? मैं वास्तव में इस बिंदु पर स्क्रीन पर यूआई के साथ काम नहीं कर रहा हूँ। मैं सिर्फ एक दृश्य बना रहा हूं और इसे एक छवि में सहेज रहा हूं। अगर मैं इसे स्क्रीन पर नहीं रख रहा हूं, तो क्या इसे संभालने का एक सुरक्षित तरीका होगा? –

+0

डिस्क को एक अलग थ्रेड में डिस्क पर लिखना निश्चित रूप से एक सुरक्षित तरीके से किया जा सकता है। हालांकि कैलेयर से छवि प्राप्त करना ... ईमानदार होने का कोई विचार नहीं। मुझे लगता है कि यह सब 'renderInContext' के अंदर क्या होता है इस पर निर्भर करता है, लेकिन जहां तक ​​मुझे पता है कि उस तरह की जानकारी कहीं भी दस्तावेज नहीं है। – Pieter

+0

धन्यवाद, पीटर। मैं अपनी पद्धति के लिए एक समाधान खोजने की कोशिश करने जा रहा हूं। –

संबंधित मुद्दे