2012-04-02 3 views
0

У меня возникли проблемы при сравнении двух строковых объектов в объективе-c. Вот моя ситуация:Как сравнить строки в объективе-c?

У меня есть два объекта NSString на мой взгляд контроллера, как следовать показано в моем коде ниже, в моем файле .h:

@property(nonatomic,retain) NSString *detailFacility; 

в моем файле .m в функции viewDidLoad:

- (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

+0

Это может быть проблема с кодировкой. Вы получаете идентификатор объекта из объекта JSON, может ли кодировка этой строки отличаться от строки, определенной вашим приложением, даже если они регистрируют то же самое? – rdelmar

+0

repost of [Как сравнить строковые объекты в объективе-c?] (Http://stackoverflow.com/questions/9979399/how-to-compare-string-objects-in-objective-c) –

ответ

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: на числовых экземплярах (так как это будет быстрее и проще, чем число-> преобразования строк везде).

Смежные вопросы