NSDictionary не отвечает на objectForKey и valueForKey

У меня есть следующий

// this code is inside cellForRowAtIndexPath for a TableViewController

id answer = [self.answers objectAtIndex:indexPath.row];
if ([answer respondsToSelector:@selector(objectForKey)]) {
    cell.textLabel.text = [answer valueForKey:@"answer_id"];
} else {
    // I'm ending up here, instead of the cell.textLabel being set
    [NSException raise:@"Answer is of invalid class" format:@"It should be able to respond to valueForKey, class: %@", [answer class]];
}

, где self.answers установлен на

// the question that gets passed here is a parsed single object 
// from the `/questions` path
- (NSArray *)answersForQuestion:(NSDictionary *)question {
    NSString *contents = [self loadContentsForPath:[question valueForKey:@"question_answers_url"]];
valueForKey:@"question_answers_url"]];
    NSDictionary *data = [contents JSONValue];
    NSArray *answers = [data valueForKey:@"answers"];
    return answers;
}

- (NSString *)loadContentsForPath:(NSString *)path {
    NSString *wholeURL = [@"http://api.stackoverflow.com/1.1" stringByAppendingString:path];    
    return [NSString stringWithContentsOfURL:[NSURL URLWithString:wholeURL] encoding:NSUTF8StringEncoding error:nil];
}

] Я делаю точно то же самое для загрузки вопросов, что отлично работает, но похоже, что это терпеть неудачу в ответах, когда я пытаюсь сделать [ответы valueForKey: @ "answer_id"] .

Я не думаю, что это проблема парсера JSON, потому что он отлично работает с данными / questions .

Когда отладчик останавливается на исключении и когда я пытаюсь щелкнуть правой кнопкой мыши -> Распечатать описание на ответах , я получаю

Printing description of answer:
<CFBasicHash 0x6ec1ec0 [0x1474b38]>{type = mutable dict, count = 13,
entries =>
    1 : <CFString 0x6ec57d0 [0x1474b38]>{contents = "down_vote_count"} = <CFNumber 0x6e1dc00 [0x1474b38]>{value = +0, type = kCFNumberSInt32Type}
    2 : <CFString 0x6ec4ee0 [0x1474b38]>{contents = "last_activity_date"} = <CFNumber 0x6ec5780 [0x1474b38]>{value = +1326379080, type = kCFNumberSInt64Type}
    3 : <CFString 0x6ec44b0 [0x1474b38]>{contents = "community_owned"} = <CFBoolean 0x1474f68 [0x1474b38]>{value = false}
...

, который мне кажется обычным хешем. Я попробовал и objectForKey , и valueForKey , и ни один из них не работал, то есть

exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0x6b2a330'

, когда я делаю только

cell.textLabel.text = [answer objectForKey:@"answer_id"];
0
задан Jakub Arnold 12 January 2012 в 14:42
поделиться