2011-08-06 18 views
18

Uygulamamda, belirli bir noktada iki NSString s bir şey yapmak için aynı olmasını gerektiren bir mekanizma var; İkisini karşılaştırdığım zaman, aynı olsalar bile, bunu hala tanımıyor. kodu şöyle bir şeydir:İki NSStrings Karşılaştır

NSString * aString = [self someMethodThatGetsAString]; 

NSString * bString; 

BOOL areStringsTheSame = NO; 

while (areStringsTheSame != YES) { 

     bString = [self someMethodThatTakesNSStringsFromAnArrey]; 
     if (bString == aString) { 
      areStringsTheSame = YES; 
     { } 

Hatta bir NSLog() sokulmuş ve belirli bir noktada onlar aynıydı (ve aynı bildiğim kadarıyla bu ... açılımı == budur) emin yaptı ama hala BOOL değerini değiştirmek için if'a girmedi.

Bu karşılaştırmanın başka bir yolu var mı? Bir şey mi eksik?

if ([bString isEqualToString:aString]) 

== referansları (adreslerini) karşılaştırır dizeleri değil dizeleri değeri:

cevap

72

yöntemden isEqualToString: kullanabilirsiniz.

+2

#define ZERO_WIDTH_SPACE_STRING @"\u200B" 

karşılaştırmakta önce sıfır genişlik beyaz boşluk karakterleri adresinin dize temizlemek gerekiyor bu fethetmek için Doğru. Ve OOP prensiplerini araştırın (aynı özelliklere sahip iki nesne mutlaka aynı nesneler değildir). Aksi takdirde, geliştirici hayatınızın her gün bu sorunuyla karşılaşacaksınız :-) – vstrien

+0

Görünüşe göre, == 'Objective-C'nin string değişkenlerini kullandığı için, dizeleri büyük-küçük harf duyarlılığıyla karşılaştırmak için çalışıyor. Örneğin, bir dize A ve dize B belirtin ve '==' yapın ve bunların her ikisinin de aynı adreste depolandığını görürsünüz. –

2

Son zamanlarda NSLog üzerinde birbirine benzeyen iki NSStrings'in farklı olabileceğinden şaşkına uğradım. Bunun nedeni, bazen NSString'in sıfır genişlikli bir boşluk karakteri içerebilmesidir. bunun farkında olun ve düşünün:

NSMutableString *eMailToAdd = [NSMutableString string]; 

NSMutableCharacterSet *charSet = [[NSCharacterSet whitespaceCharacterSet] mutableCopy]; 
    //[charSet formUnionWithCharacterSet:[NSCharacterSet punctuationCharacterSet]]; 

    NSString *rawStr = [[tokenField textField] text]; 
    for (int i = 0; i < [rawStr length]; i++) 
    { 
     if (![charSet characterIsMember:[rawStr characterAtIndex:i]]) 
     { 
      [eMailToAdd appendFormat:@"%@",[NSString stringWithFormat:@"%c", [rawStr characterAtIndex:i]]]; 
     } 
    } 
3

Bu yaklaşım benim için çalıştı:

if ([firstString compare:secondString] == NSOrderedSame) { 
    //Do something when they are the same 
} else { 
    //Do something when they are different 
} 
İlgili konular