我在比较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条件没有执行,请告诉我其中缺少的内容。
答案 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:
(因为它会更快,比数字 - >字符串转换更直接。)