5

का कारण बनता है मैं अपने BEMSimpleLineGraph को कॉन्फ़िगर कर रहा हूं और रैखिक ढाल छायांकन को छोड़कर सफलतापूर्वक ऐसा करने में सक्षम हूं।CGContextDrawLinearGredient EXC_BAD_ACCESS

let colorspace:CGColorSpaceRef = CGColorSpaceCreateDeviceRGB() 
     let num_locations:size_t = 2 
     var locations: [CGFloat] = [0.0, 1.0] 
     var components: [CGFloat] = [ 
      1.0, 1.0, 1.0, 1.0, 
      1.0, 1.0, 1.0, 0.0 
     ] 

     self.myGraph.gradientBottom = CGGradientCreateWithColorComponents(colorspace, components, locations, num_locations) 

सब कुछ सही ढंग बनाता है लेकिन BEMLine.m फ़ाइल में EXC_BAD_ACCESS स्मृति त्रुटि निकलती है: प्रदान की उदाहरण Obj सी परियोजना

CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB(); 
    size_t num_locations = 2; 
    CGFloat locations[2] = { 0.0, 1.0 }; 
    CGFloat components[8] = { 
     1.0, 1.0, 1.0, 1.0, 
     1.0, 1.0, 1.0, 0.0 
    }; 
    self.myGraph.gradientBottom = CGGradientCreateWithColorComponents(colorspace, components, locations, num_locations); 

में इस कोड को संदर्भित और स्विफ्ट में यह करने के लिए इसे लिप्यंतरण के बाद शामिल है, इस लाइन

CGContextDrawLinearGradient(ctx, self.bottomGradient, CGPointZero, CGPointMake(0, CGRectGetMaxY(fillBottom.bounds)), 0); 

मैंने सम्मिलित कर दिया obj सी हैडर को पाटने पर रोक, CoreGraphics ढांचा, फिर की विशेषताओं फलक में नीचे रंग सक्षम जोड़ा स्टोरीबोर्ड में शानदार दृश्य नियंत्रक, सभी मानकों के सही डेटा प्रकार सुनिश्चित करने के लिए ऐप्पल के विकास पृष्ठों का संदर्भ दिया, लेकिन अभी भी सूख रहा हूं। त्रुटि समानताओं की जांच में, मैंने यह भी महसूस किया है कि शीर्ष रैखिक ढाल को खींचने की कोशिश करने के साथ ही वही त्रुटि आती है। गलती को आकर्षित करने की कोशिश कर रहे ओब्जे-सी कोड में त्रुटि झूठ लगती है, लेकिन फिर से मुझे क्या करना है इसके नुकसान में हूं।

+0

दिमाग पूरी क्रैश रिपोर्ट ('.crash' फ़ाइल) साझा करना? –

+0

@ JohannesWeiß प्रतिक्रिया के लिए धन्यवाद! मैंने इसे यहां आपके लिए अपलोड किया है: (https://drive.google.com/file/d/0ByFqolB5nSXKU1JhYjlYVlpjWTQ/view?usp=sharing) –

+0

मुझे एक नज़र थी और ऐसा लगता है कि 'self.bottomGradient' शून्य/NULL नहीं है लेकिन कुछ स्मृति को इंगित कर रहा है जिसमें वैध ढाल नहीं है। –

उत्तर

5

स्विफ्ट से BEMSimpleLineGraph का उपयोग करते समय मुझे एक ही समस्या थी। सौभाग्य से मैं पुस्तकालयों Github के मुद्दों पृष्ठ पर एक जवाब मिला:

https://github.com/Boris-Em/BEMSimpleLineGraph/issues/105

इस मुद्दे को हल करने के लिए, मैं सिर्फ, स्विफ्ट वर्ग में एक वैश्विक ढाल घोषित तो की तरह:

var gradient : CGGradient? 

0123:

और बस के साथ लाइन

self.myGraph.gradientBottom = CGGradientCreateWithColorComponents(colorspace, components, locations, num_locations) 

प्रतिस्थापित

जाहिर है, ढाल अन्यथा स्मृति में आवंटित नहीं रहेगा और उस समय पुस्तकालय को इसका उपयोग करने की आवश्यकता होगी, यह अब उपलब्ध नहीं है।

+0

मेरी समस्या हल हो गई! धन्यवाद mjrehder! –

0

एक बात जो मुझे नोट है कि सेटअप कोड में आप self.myGraph.gradientBottom का उपयोग करते हैं जबकि ड्राइंग कोड में आप self.bottomGradient का उपयोग करते हैं।

क्या ये वही होना चाहिए? या आप बाद के लिए एक मूल्य आवंटित करना भूल गए?

+0

स्वयं। बॉटम ग्रेडिएंट ड्राइंग कोड ओबीजे-सी था जिसे बीईएमएसम्प्लेलाइन ग्राफिंग लाइब्रेरी द्वारा प्रदान किया गया था, इसलिए मुझे यकीन नहीं है कि यह मुद्दा है, लेकिन मैं सराहना करता हूं प्रतिक्रिया। –