【发布时间】:2012-02-08 20:21:41
【问题描述】:
我有以下
// 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];
}
我正在做同样的事情来加载问题,它工作得很好,但似乎
当我尝试做[answers valueForKey:@"answer_id"]时,答案失败。
我认为这不是 JSON 解析器的问题,因为它适用于 /questions 数据。
当调试器在异常上停止并且当我尝试右键单击 -> 在answers 上打印描述时,我得到
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"];
【问题讨论】:
-
您真的阅读了异常描述吗?它会告诉你问题是什么就在那里。
-
@JonathanGrynspan 是的,但我不知道我不能将 NSNumber 分配给 NSString,因为我主要做 Ruby,这完全可以。现在这似乎是一个非常愚蠢的错误。
标签: iphone objective-c ios dictionary nsdictionary