2010-07-24 10 views
5

उद्देश्य उद्देश्य सी सीखने के तरीके में मिला लेकिन मैं अब वापस आ गया हूं और यह मुझे पागल कर रहा है।उद्देश्य सी - एनएसएआरएआरई और लूप संरचना के लिए

i=0; 
    for (i=0;[photoList count]; i++) { 
     NSLog(@"%i",i); 
     NSLog(@"%@",[photoList objectAtIndex:i]); 
     NSString *fileName = [photoList objectAtIndex:i]; 
     sendImage = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:fileName ofType:nil]]; 
     UIImageWriteToSavedPhotosAlbum(sendImage,self,@selector(savedPhotoImage:didFinishSavingWithError:contextInfo:),NULL);} 

photoList, सिर्फ इसलिए की तरह एक NSArray है 24 वस्तुओं के साथ छोड़कर:

NSArray* photoList = [NSArray arrayWithObjects:@"Photo 1.jpg", 
    @"Photo 2.jpg", 
    @"Photo 3.jpg", 
    @"Photo 4.jpg",nil]; 

यह काम करता है ... यह प्रतियां कैमरा रोल करने के लिए फ़ोटो

यह मेरा कोड है। .. और फिर

2010-07-24 19 के साथ दुर्घटनाओं: 34: 36.116 iCardz2go Poindexter [29662: 207] * न आया हुआ अपवाद 'NSRangeException', कारण की वजह से एप्लिकेशन समाप्त: '* - [NSArray objectAtIndex:]: सूचकांक 24 गुना [0 .. 23] '

मैं ऐसे

for (i=0;1<23; i++) 

के रूप में विभिन्न विन्यास की कोशिश की है परे केवल पाने के लिए 2010-07-24 19:51 : ०१.०१७ iCardz2go Poindexter [29,908: 207] *** न आया हुआ अपवाद 'NSInvalidArgumentException', कारण की वजह से एप्लिकेशन समाप्त: '+ [NSInvocation invocationWithMethodSignature:]: विधि हस्ताक्षर तर्क नहीं के बराबर नहीं हो सकता'

तो यह शून्य और पासिंग पढ़ रही यह।

मुझे पता है कि यह कुछ वास्तविक सरल होने जा रहा है जिसे मैं भूल गया हूं। फोटो 23 (गिनती) पर लूप क्यों नहीं निकलता है?

आपकी मदद की बहुत सराहना की जाती है! पी

+0

कैसे गिनती 23 हो सकता है अगर वहाँ 24 वस्तुओं रहे हैं? –

+0

आपको सी प्रोग्रामिंग भाषा में एक ट्यूटोरियल से निपटना चाहिए क्योंकि उम्मीद है कि यह लूप जैसे संरचनाओं को कवर करेगा। उद्देश्य-सी सी के शीर्ष पर काफी पतली परत है, इसलिए सी से परिचित होने से आप उद्देश्य-सी के साथ पकड़ने में भी मदद करेंगे। – dreamlax

+0

मार्सेलोस - क्योंकि मैंने सोचा था कि एनएसएआरएआर 0 से गिना जाता है ... है ना? –

उत्तर

12
सी में लूप और इस तरह ऑब्जेक्टिव-सी देखने के लिए

:

for (initialization; condition; increment) { 
    // body 
} 

initialization जगह है जहाँ आप पाश की स्थापना; यह वह जगह है जहां आप इसे बताते हैं कि किसके साथ शुरुआत करना है। condition प्रत्येक पुनरावृत्ति के लिए पहले परीक्षण सहित परीक्षण किया जाता है; यदि condition सत्य का मूल्यांकन करता है, तो लूप का शरीर निष्पादित किया जाता है। प्रत्येक पुनरावृत्ति के अंत में, increment का मूल्यांकन किया जाता है।

तो:

for (int i = 0; i < 10; i++) { 
    printf("%i\n", i); 
} 

9. तक संख्याओं प्रिंट होगा 0 क्या आप शायद तुम्हारा के लिए चाहते हैं:

NSUInteger count = [photoList count]; 
for (NSUInteger i = 0; i < count; i++) { 
    NSString *fileName = [photoList objectAtIndex: i]; 
    sendImage = [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource: fileName ofType: nil]]; 
    UIImageWriteToSavedPhotosAlbum(sendImage, self, @selector(savedPhotoImage:didFinishSavingWithError:contextInfo:), NULL); 
} 

नोट पाश बाहर count का काम; यह बस एक अनुकूलन है, तो पाश प्रत्येक यात्रा के लिए एक अतिरिक्त संदेश भेजने के लिए नहीं है (आप बस के रूप में आसानी से i < [photoList count] कर सकता है।)

कि मदद करता है?

+0

भी आपको धन्यवाद। अभी भी इसके साथ दुर्घटनाग्रस्त हो रहा है: अपरिपक्व अपवाद के कारण ऐप को समाप्त करना 'एनएसआईएनवालिडअर्ग्यूमेंट एक्सेप्शन', कारण: '+ [एनएसआईएनवोकेशन इनवोकेशन विथ मैथ्यूज सिग्नेचर:]: विधि हस्ताक्षर तर्क शून्य नहीं हो सकता है' यह मुझे पागल कर रहा है क्योंकि मुझे त्रुटि संदेश की व्याख्या करने के लिए पर्याप्त जानकारी नहीं है। –

+0

क्या आपकी कक्षा वास्तव में '-वृत्त फोटो इमेज का जवाब देती है: didFinishSavingWithError: contextInfo: '? आपको यह सुनिश्चित करना होगा कि लागू किया गया है। –

+0

आपको धन्यवाद! वह समस्या थी! मुझे यह परीक्षण करना याद है ... कुछ ... कुछ दिन पहले और कम और देखिए कि अभी भी टिप्पणी की गई है !!!! लेकिन क्योंकि मैं पहली बार एनएसएआरएआरई के साथ खेल रहा था, और इसे एक लूप में डालकर असली उन्नत (एलओएल!) प्राप्त कर रहा था, मैंने स्वचालित रूप से यह माना कि समस्या वहां थी। आपकी सहायता और उपर्युक्त उन लोगों और अन्य नए लोगों द्वारा अत्यधिक सराहना की जाती है। आम तौर पर मैं सिर्फ खोज करके जवाब पा सकता हूं लेकिन यह मुझे स्टंप कर दिया था। सभी को धन्यवाद! उम्मीद है कि एक दिन मैं लोगों के लिए भी ऐसा ही कर सकता हूं। –

19

आप तेजी से गणना क्यों नहीं करते?

for (NSString *photoFile in photoList) { 
    NSLog(@"%@", photoFile); 
    sendImage = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] 
           pathForResource:photoFile 
             ofType:nil]]; 

    UIImageWriteToSavedPhotosAlbum(sendImage, self, @selector(savedPhotoImage:didFinishSavingWithError:contextInfo:), NULL);} 
} 
+0

धन्यवाद! मैंने अभी तक तेजी से गणना के बारे में नहीं सुना था ... सीखने के लिए बहुत कुछ। लेकिन आपके कोड का उपयोग करने से पहले यह एक ही त्रुटि के साथ कैमरा रोल को लिखने से पहले क्रैश हो जाता है: बिना अपवाद अपवाद के कारण ऐप को समाप्त करना 'एनएसआईएनवालिडअर्गमेंट एक्सेप्शन', कारण: '+ [एनएसआईएनवोकेशन इनवोकेशन विथ मैथ्यूज सिग्नेचर:]: विधि हस्ताक्षर तर्क शून्य नहीं हो सकता है' –

+0

लूप के साथ कहें (और इसके ऊपर मुद्रित कोड में एक गलती है वास्तव में मैं <[फोटोलिस्ट गिनती] है ... यह लूप के माध्यम से जाता है, छवियों को लिखता है, फिर दुर्घटनाग्रस्त हो जाता है। –

4

दोनों के लिए लूप की स्थिति — [photoList count] और 1<23 — हमेशा true का मूल्यांकन। i < [photoList count] आज़माएं। बेहतर अभी भी, @ ईमैंटास के उत्तर का उपयोग करें।

+0

आपको बहुत धन्यवाद ... यह मैं था <[फोटोलिस्ट गिनती] मुझे नहीं पता कि पेस्टिंग में क्या हुआ। लेकिन यह ठीक नहीं करता है। –

+0

मैं <= [फोटोलिस्ट गिनती] का उपयोग करके चलता हूं और फिर क्रैश करता है: बिना अपवाद 'NSRangeException' के कारण ऐप को समाप्त करना, कारण: '*** - [एनएसएआरएआर ऑब्जेक्टएट इंडेक्स:]: 24 से अधिक सूचकांक [0 .. 23]' क्या इससे समस्या को कम करने में मदद मिलती है? –

0
अपने कोड से

:

for (i=0;[photoList count]; i++) 

हालत [photoList count] हमेशा सच है। हालांकि मैंने पूरी चर्चा नहीं पढ़ी, हालांकि। के लिए करने के लिए बयान के लिए अपने

0

बदलें (i = 0; मैं < [photoList गिनती]; i ++)