2010-07-24 14 views
5

Çalışma, C nesnesini öğrenme yolunda ilerledi ama şimdi ona döndüm ve bu beni çıldırtıyor.Amaç C - NSArray ve Döngü yapısı

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 24 nesnelerle dışında sadece bu yüzden gibi bir NSArray olduğu:

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

Çalışıyor ... kopyalar kamera rulo fotoğrafları

Bu benim kodudur. .. ve sonra

2010-07-24 19

çöker: 34: 36,116 iCardz2go Poindexter [29662: 207] * nedeniyle yakalanmamış istisna 'NSRangeException', nedeni uygulamayı Sonlandırma: '* - [NSArray objectAtIndex:]: Böyle

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

gibi çeşitli yapılandırmaları denedim

sınırları [0 .. 23]' ötesinde endeksi 24 sadece almak için 2010-07-24 19:51 : 01,017 iCardz2go Poindexter [29908: 207] *** nedeniyle yakalanmamış istisna 'NSInvalidArgumentException', nedeni uygulamayı Sonlandırma: '+ [NSInvocation invocationWithMethodSignature:]: yöntem imzası argüman sıfır olamaz' Yani nil ve ölümünü okuyor

o.

Unuttuğum basit bir şey olacağını biliyorum. Neden Photo 23'te (sayı) döngüden atlamıyor?

Yardımınız büyük beğeni topluyor! P

+0

nasıl sayımı 23 olabilir? –

+0

C programlama dilinde bir öğretici ile baş etmelisiniz, çünkü umarım döngüler gibi yapıları da kapsayacaktır. Objective-C, C'nin üzerinde oldukça ince bir tabakadır, bu yüzden C ile tanışmak, Objective-C ile de kavramanıza yardımcı olacaktır. – dreamlax

+0

Marcelos - Çünkü NSArray'ın 0'dan saydığını düşündüm ... değil mi? –

cevap

12

: Eğer döngü kurmak nereye

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

initialization olduğu; Nerede başlayacağını anlattığın yer. condition, ilk dahil olmak üzere her yineleme için test edilmiştir; condition doğru olarak değerlendirirse, döngü gövdesi yürütülür. Her yinelemenin sonunda, increment değerlendirilmektedir.

Yani: 9 arasındaki numaraları 0 yazdırmak Will

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

Ne muhtemelen sizinki için istediğiniz geçerli:

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); 
} 

Not döngünün dışında count atama; Döngü her bir iterasyon için ekstra bir mesaj göndermek zorunda kalmadan basitçe bir optimizasyon (i < [photoList count]'u kolayca yapabilirsiniz.)

Bu yardımcı olur mu?Kodunuzdaki itibaren

+0

Ayrıca teşekkürler. Hala çöküyor: Uygulanamayan istisna 'NSInvalidArgumentException' nedeniyle uygulamayı sonlandırma, nedeni: '+ [NSInvocation invocationWithMethodSignature:]: yöntem imza argümanı geçersiz olamaz' Bu beni deli fındık sürüyor becaise hata mesajını yorumlamak için yeterli bilmiyorum. –

+0

Sınıfınız aslında -savedPhotoImage: didFinishSavingWithError: contextInfo: 'ye yanıt veriyor mu? Uygulandığından emin olmalısın. –

+0

TEŞEKKÜR EDERİZ! Sorun buydu! Bunu test etmeye çalıştığımı hatırlıyorum ... bir şey ... birkaç gün önce ve düşük ve hala yorumlandığını gördüm !!!! Ama ilk kez NSArray ile oynuyordum ve bir döngü içine koyarak gerçek ilerlemeyi (LOL!) Aldığım için otomatik olarak sorunun var olduğunu varsaydım. Yardımınız ve yukarıdakiler benim ve diğer yeni başlayanlar tarafından çok takdir ediliyor. Genellikle cevabı sadece arayarak bulabilirim ama bu beni güldürdü. Hepinize teşekkürler! Umarım bir gün insanlar için aynısını yapabilirim. –

19

Neden hızlı numaralandırma yapmayı denemiyorsunuz?

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

Teşekkür ederiz! Şimdiye kadar hızlı sayımı duymamıştım ... öğrenecek çok şey vardı. Ama kodunuzu kullanarak aynı hata ile rulo rulo yazmadan önce çöküyor: Yakalanmamış istisna 'NSInvalidArgumentException' nedeniyle neden sona erdirme, nedeni: '+ [NSInvocation invocationWithMethodSignature:]: yöntem imza argüman sıfır olamaz' –

+0

Döngü ile söyleyin (ve yukarıda yazılan kodda bir hata aslında ben <[photoList sayımıdır] ... döngüden geçiyor, görüntüleri yazıyor, sonra çöker. –

4

Hem dongu koşulları — [photoList count] ve 1<23 — her true değerlendirmek. i < [photoList count]'u deneyin. Daha da iyisi, @ Eimantas'ın cevabını kullan. C döngüler ve bunun gibi Objective-C görünüm için

+0

Teşekkür ederim çok ... <[photoList count] Yapıştırmada ne olduğunu bilmiyorum ama bunu düzeltmiyor. –

+0

i <= [photoList count] işlevini kullanarak çalışır ve ardından: : NSRangeException 'yakalanmamış istisna nedeniyle sonlandırma uygulaması reason: '*** - [NSArray objectAtIndex:]: sınırların ötesindeki index 24 [0 .. 23]' Bu problemi daraltmaya yardım eder mi? –

0

:

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

koşul [photoList count] daima doğrudur. Tüm tartışmayı okumamıştım.

0

Değişim senin açıklamada için için (i = 0; i < [PhotoList saymak]; i ++) 24 nesne varsa