2012-04-02 17 views
0

我在比較objective-c中的兩個字符串對象時遇到了問題。這裏是我的情況:如何比較objective-c中的字符串?

我有我的看法控制器配備了兩個NSString對象爲在我的代碼所示按照以下,在我的.h文件中:

@property(nonatomic,retain) NSString *detailFacility; 
在viewDidLoad中功能我.m文件

- (void)viewDidLoad 
{ 

NSData *facilityZoneURL = [NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"some URL..."]]]; 
NSError *error; 
NSDictionary *facilityZoneDict = [NSJSONSerialization JSONObjectWithData:facilityZoneURL options:kNilOptions error:&error]; 

NSArray *facilityZoneData = [facilityZoneDict objectForKey:@"Data"]; 

if (![facilityZoneData isKindOfClass:[NSArray class]]) { 
    //JSON does not returned the Dictionary; 
} 

facilityZoneArray = [[NSMutableArray alloc] init]; 
NSLog(@"%@",detailFacility); 
for (NSDictionary *item in facilityZoneData) { 
    NSString *zoneFacilityID = [NSString stringWithFormat:@"%@",[item objectForKey:@"FacilityId"]]; 

    NSLog(@"Facility ID: %@ --- Zone ID: %@",detailFacility,zoneFacilityID); 

    NSLog(@"%@",[zoneFacilityID isEqualToString:detailFacility]? @"YES" : @"NO"); 
    if ([zoneFacilityID isEqualToString:detailFacility]) { 
     NSLog(@"object added"); 
    } 
} 

但問題是它沒有比較字符串,因爲它肯定會匹配某些位置。

這裏是我的NSLog情況:

2012-04-02 12:12:42.998 CarbonIndex[11078:207] Facility ID: 1056 --- Zone ID: 1056 
2012-04-02 12:12:42.999 CarbonIndex[11078:207] NO 

正如你可以看到,無論是字符串的精確匹配,但如果條件不執行,告訴我,我在這很想念。

+0

是detailFacility和NSString?我沒有看到它的聲明。沒關係。我剛看到它。 – DRVic 2012-04-02 16:37:49

+0

這可能是一個編碼問題。您從JSON對象獲取設施ID,即使它們記錄相同,該字符串的編碼是否可能與應用定義的字符串不同? – rdelmar 2012-04-02 16:43:15

+0

[如何比較objective-c中的字符串對象](http://stackoverflow.com/questions/9979399/how-to-compare-string-objects-in-objective-c) – 2012-04-02 17:30:02

回答

1

這可能是一個編碼問題。嘗試使用類似的東西,看看是否有幫助:

NSLog(@"%@",[zoneFacilityID compare:detailFacility]==NSOrderedSame? @"YES" : @"NO"); 

比較更好地與不同的編碼規範化。在這裏看到的細節:http://weblog.bignerdranch.com/?p=334

0

更可能的是,你的一個字符串不是字符串。這是一個NSNumber,因此,嘗試進行字符串比較失敗。

試着改變你的日誌記錄,以驗證這一點:

NSLog(@"Facility ID: %@ --- Zone ID: %@",[detailFacility class], 
       [zoneFacilityID class]); 

如果是這樣的話,那麼你可能會想改變任何代碼,目前預計到存儲一個NSString來存儲一個NSNumber,然後用isEqual:關於數字實例(因爲它比任何地方的數字 - >字符串轉換更快速,更直接)。