如何比较objective-c中的字符串?

时间:2012-04-02 16:27:33

标签: objective-c ios nsarray nsdictionary

我在比较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

正如您所看到的那样,两个字符串都是准确匹配的,但是if条件没有执行,请告诉我其中缺少的内容。

2 个答案:

答案 0 :(得分:1)

这可能是编码问题。尝试使用这样的东西,看看它是否有帮助:

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

与不同的编码规范化相比,效果更好。详情请见http://weblog.bignerdranch.com/?p=334

答案 1 :(得分:0)

很可能,你的一个字符串不是字符串。它是一个NSNumber,因此,尝试进行字符串比较失败。

尝试更改日志记录以验证此操作:

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

如果是这种情况,那么您可能希望更改当前预期存储NSString的任何代码来存储NSNumber,然后在数字实例上使用isEqual:(因为它会更快,比数字 - >字符串转换更直接。)