2011-06-21 14 views
7

मुझे एक रिंग बफर चाहिए। यह एक कतार के समान काम करना चाहिए जहां तत्व बाहर जाते हैं और अंदर जाते हैं लेकिन बफर में तत्वों की कुल मात्रा वही रहनी चाहिए।आईओएस प्रोजेक्ट में CHCircularBuffer को कैसे कार्यान्वित करें? मेरे गेम आईओएस प्रोजेक्ट के लिए

मैंने जावा का उपयोग करके सफलतापूर्वक रिंग बफर लागू किया लेकिन मैं उद्देश्य-सी के साथ इतना familar नहीं हूँ। मुझे CHCircularBuffer नामक वेब पर एक रिंग बफर कार्यान्वयन मिला: https://bitbucket.org/devartum/chdatastructures/src/4d6d7194ee94/source/CHCircularBuffer.m हालांकि मैं इसे सही ढंग से कार्यान्वित करने में विफल रहा।

सर्कुलर बफर TerrainManager नामक कक्षा की एक संपत्ति है जो सभी गणितीय इलाके की पीढ़ी करता है।

@interface TerrainManager : NSObject{ 

    int terrainParts; 

    CHCircularBuffer* circularTerrainBuffer; 
} 

@property(nonatomic, retain) CHCircularBuffer *circularTerrainBuffer; 
@end 

यह कैसे अंगूठी बफर TerrainManager

circularTerrainBuffer = [[CHCircularBuffer alloc] initWithCapacity:parts]; 

के कार्यान्वयन में आरंभ नहीं हो जाता यह बफर का एक उदाहरण बनाता है और भागों में आकार संपत्ति सेट। अब मैं बफर addObject विधि का उपयोग करने के लिए वस्तुओं जोड़ें:

[circularTerrainBuffer addObject:[NSNumber numberWithDouble:0.2]]; 

कभी कभी यह लाइन एक त्रुटि "exec_bad_access" प्राप्त करता है। जैसे जब मैं 15 की क्षमता वाले बफर को सबकुछ ठीक करता हूं, 20 के साथ मुझे त्रुटि मिलती है।

अब मैं इलाके के वर्ग से बफर तक पहुंचने का प्रयास करता हूं जहां ड्राइंग होता है। लेकिन जब भी मैं वस्तुओं तक पहुंचने का प्रयास करता हूं तो मुझे "bad_access" त्रुटि मिलती है।

NSArray *arr = [terrainManager.circularTerrainBuffer allObjects]; 

उदा। यह लाइन त्रुटि पैदा करेगी।

तो मेरे कोड में कुछ गड़बड़ है। शायद मैं बफर को समझ नहीं पा रहा हूं और वस्तुओं को गलत तरीके से जोड़ता हूं। मुझे नहीं पता। कोई विचार या सुझाव?

+3

एफवाईआई, सीएचडीटास्ट्रक्चर.फ्रेमवर्क मूल रूप से: http://cocoaheads.byu.edu/code/CHDataStructures –

उत्तर

3

आपके द्वारा दिखाए जा रहे कोड के स्निपेट सही हैं। मैंने आपके द्वारा निर्दिष्ट तरीके से CHCircularBuffer परीक्षण करने के लिए एक छोटी परियोजना लागू की है और यह सही तरीके से काम करता है। तो, समस्या कहीं और होना चाहिए।

इसके आसपास एकमात्र तरीका है, आईएमएचओ, असफल होने वाली लाइन पर ब्रेकपॉइंट डालता है और यह देखने के लिए addObject फ़ंक्शन में कदम रखता है कि यह वास्तव में कहां विफल रहता है। सरणी को वहां पर फिर से आवंटित किया जा सकता है, इसलिए हो सकता है कि यह असफल हो और खराब पहुंच दे। allObjects के लिए वही।

वैसे भी, मैं कहना है कि मैं किसी भी मुद्दे के बिना अपने परीक्षण को अंजाम नहीं कर सके, वस्तुओं को जोड़ने के लिए उन्हें सिर और पूंछ से निकालने, और कोई मुद्दों के साथ सभी वस्तुओं की सरणी हो रही है।

आप अधिक कोड पोस्ट है, तो हम शायद थोड़ा अधिक कर सकते हैं।

+0

क्या आप इसे मेरे लिए ज़िप्प कर सकते हैं और इसे अपलोड कर सकते हैं? –

+0

उदा। megaupload.com –

+0

कृपया,, http://dl.dropbox.com/u/29366847/provaUtility.zip देख जाँच 'MainViewController'। 'ShowInfo' (जानकारी बटन पर क्लिक करें) अंगूठी,' flipsideViewControllerDidFinish' (किया बटन पर क्लिक करें) करने के लिए कहते हैं 'लॉग allObjects count'। यदि आपके कोई और प्रश्न हैं, तो नि: शुल्क महसूस करें ... – sergio

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