Как сравнить строки в target-c? - PullRequest
0 голосов
/ 02 апреля 2012

У меня проблемы при сравнении двух строковых объектов в target-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

Как вы можете видеть, что обе строки точно совпадают, но условие if не выполняется, Скажите, что мне в нем не хватает.

Ответы [ 2 ]

1 голос
/ 02 апреля 2012

Вероятно, проблема с кодировкой. Попробуйте использовать что-то вроде этого и посмотрите, поможет ли это:

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

Сравнение лучше работает при разных нормализациях кодировки. Подробности здесь: http://weblog.bignerdranch.com/?p=334

0 голосов
/ 02 апреля 2012

Скорее всего, одна из ваших строк не является строкой. Это NSNumber, поэтому попытка сравнения строк не удалась.

Попробуйте изменить логирование, чтобы убедиться в этом:

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

Если это так, то вы, вероятно, захотите изменить любой код, который в настоящее время должен хранить NSString, на хранение NSNumber, а затем использовать isEqual: для числовых экземпляров (так как это будет быстрее и проще). чем число-> преобразования строк везде).

...