Идентификатор сравнения не работает правильно - PullRequest
0 голосов
/ 25 сентября 2011

Я пытаюсь сравнить классы объекта id. Однако, если я попытаюсь сравнить класс объекта с классом NSNumber, он не будет зарегистрирован как равный, даже если я установил некоторые переменные в NSNumbers. Подскажите пожалуйста, почему он не регистрируется, вот мой код.

NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:n.title forKey:@"title"];
[dict setObject:[NSNumber numberWithBool:n.allDay] forKey:@"allDay"];
[dict setObject:[NSNumber numberWithInt:n.availability] forKey:@"availability"];
[dict setObject:[NSNumber numberWithInt:n.createdBy] forKey:@"createdBy"];
[dict setObject:n.endDate forKey:@"endDate"];
[dict setObject:n.location forKey:@"location"];
[dict setObject:n.notes forKey:@"notes"];
[dict setObject:n.ownerUsername forKey:@"ownerUsername"];
[dict setObject:n.startDate forKey:@"startDate"];
[dict setObject:[NSNumber numberWithInt:n.status] forKey:@"status"];
NSMutableString *json = [NSMutableString string];
[json appendString:@"{"];
for (NSString *key in [dict allKeys]) {
    id obj = [dict objectForKey:key];
    if ([[dict allKeys] indexOfObject:key] == 0) {
        if ([obj class] == [NSNumber class]) 
            [json appendFormat:@"\"%@\":%@", key, obj];
        else
            [json appendFormat:@"\"%@\":\"%@\"", key, obj];
    }
    else {
        if ([obj class] == [NSNumber class]) 
            [json appendFormat:@",\"%@\":%@", key, obj];
        else
            [json appendFormat:@",\"%@\":\"%@\"", key, obj];
    }
}
[json appendString:@"}"];

Ответы [ 2 ]

0 голосов
/ 25 сентября 2011

Это потому, что NSNumber является классом кластера, когда вы создаете экземпляр NSNumber, вы фактически получаете экземпляр подкласса. Как сказал Отт, вы должны использовать isKindOfClass:.

0 голосов
/ 25 сентября 2011

Использование: if ([obj isKindOfClass: [NSNumber class]]) ...

...