2012-04-25 26 views
8

NSString karakter karakteriyle döngülemeye çalışıyorum, ancak bir EXC_BAD_ACCESS hatası alıyorum. Bunun nasıl yapılacağına dair bir fikrin var mı? Şu an saatlerce çalışıyorum ama anlayamıyorum.Amaç-C NSString karakter ile döngü içinAtIndex

self.textLength = [self.text length]; 

for (int position=0; position < self.textLength; position++) { 

    NSLog(@"%@", [self.text characterAtIndex:position]); 

    if ([[self.text characterAtIndex:position] isEqualToString:@"."]){ 
     NSLog(@"it's a ."); 
    } 
} 

Çok teşekkürler:

İşte benim kodu (.m) 'dir!

+1

Sadece belirli bir karakterin konumunu bir dizede bulmaya çalışıyor musunuz? Eğer evet ise, daha kolay bir çözüm var – Lefteris

cevap

28

Karakterler nesne değildir: bakın. characterAtIndex, aslında unsigned short tamsayı türü olan unichar değerini döndürür. NSLog'da %@ yerine %C'u kullanmanız gerekir. Ayrıca karakter NSString değil, bu yüzden isEqualToString gönderemezsiniz. ch == '.''u ch ürününü '.' karşı karşılaştırmak için kullanmanız gerekir. 'a' karakter,

unichar ch = [self.text characterAtIndex:position]; 
NSLog(@"%C", ch); 

if (ch == '.') {} // single quotes around dot, not double quotes 

Not "a" C dizedir ve @"a" NSString olduğunu. Hepsi farklı tipler.

Eğer NSLog yılında unichar ch ile %@ kullandığınız

, geçersiz bellek konumu ch bir nesne yazdırmak için çalışıyor. Böylece bir EXC_BAD_ACCESS alıyorsunuz.

+0

Çözüme ve büyük açıklamaya çok teşekkür ederim! – Linus

+0

Harika, teşekkürler! Ayrıca bir hataya neden olan [NSString stringWithFormat: @ "% hu" 'kullanıyordum. – Patrick

0

characterAtIndex: gerçek karakter yazdırmak istiyorsanız sadece NSLog(@"%u",[self.text characterAtIndex:position]); veya NSLog(@"%C",[self.text characterAtIndex:position]); yapabileceğini, sen NSLog için çağrılarda kullandığınız typedef unsigned short unichar; biçim belirteci olarak ilan yanlıştır bir unichar döndürür.

Ayrıca, unichar'ın bir şekilde tanımlanmasının bir sonucu olarak, bu bir dizgi değil, dolayısıyla diğer dizelerle karşılaştırılamaz. karakter veya metin bir NSNotFound alacak bulunmazsa

NSUInteger position = [text rangeOfString:@"."].location; 

: Bu kullanabileceğiniz bir karakterin bir karakter konumunu bulmak istiyorsanız

unichar textCharacter = '.'; 

if ([self.text characterAtPosition:position] == testCharacter) { 
    // do stuff 
} 
+0

Cevabınız için çok teşekkürler! – Linus

0

: Böyle bir şey deneyin:

if(position==NSNotFound) 
    NSLog(@"text not found!"); 
+0

Cevabınız için çok teşekkürler! – Linus