-1

我有以下方法:

-(QFFriend*)getFriendById:(NSString*)fid
{
    TFLog(@"NList %@", self.nFlist);
    TFLog(@":%@:%@:", @"3", fid);
    TFLog(@"%@", [self.nFlist valueForKey:@"3"]);
//    TFLog(@"%@", [self.nFlist valueForKey:fid]);
}

当我用评论运行它时,我得到了这个结果:(并且因为我遗漏了返回而崩溃)

2013-04-12 07:39:49:972 QF[42881:2311] NList {
    2 = "<QFFriend: 0x1dd61970>";
    3 = "<QFFriend: 0x1dd76570>";
    4 = "<QFFriend: 0x1dd84a70>";
    7 = "<QFFriend: 0x1dd70760>";
}
2013-04-12 07:39:49:974 QF[42881:2311] :3:3:
2013-04-12 07:39:49:976 QF[42881:2311] <QFFriend: 0x1dd76570>

但是,如果我取消注释该行,我会再次崩溃,有人可以解释可能出了什么问题吗?

2013-04-12 07:43:28:736 QuizFuzz[42912:2311] NList {
    2 = "<QFFriend: 0x1c5888c0>";
    3 = "<QFFriend: 0x1c5a5c30>";
    4 = "<QFFriend: 0x1c5acaf0>";
    7 = "<QFFriend: 0x1c5badf0>";
}
2013-04-12 07:43:28:738 QF[42912:2311] :3:3:
2013-04-12 07:43:28:740 QF[42912:2311] <QFFriend: 0x1c5a5c30>
2013-04-12 07:43:28.741 QF[42912:907] -[__NSCFNumber length]: unrecognized selector sent to instance 0x1d8521b0
2013-04-12 07:43:28:754 QF[42912:2311] ERROR: -[__NSCFNumber length]: unrecognized selector sent to instance 0x1d8521b0
2013-04-12 07:43:28.756 QF[42912:907] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber length]: unrecognized selector sent to instance 0x1d8521b0'

最后的两个电话怎么可能不等价?在这两种情况下,我都会发送一个字符串!

4

2 回答 2

3

错误是:

-[__NSCFNumber 长度]:发送到实例的无法识别的选择器

这意味着fid不是NSNumberNSString

另外,您应该使用objectForKey:而不是valueForKey:从字典中获取对象

所以试试这个

[self.nFlist valueForKey:[fid stringValue]]
于 2013-04-12T05:51:45.820 回答
0

我不确定为什么在使用看起来非常相似的代码时会出现两次不同的崩溃。但是,如果您想修复崩溃,我相信您正在寻找的电话是:

[self.nFlist objectForKey:@"3"];

NSDictionary 类参考

/* update */ 实际上,在阅读了更多的崩溃日志并查看了 TFLogs 之后。我猜想传入的 fid 对象是一个 NSNumber,而不是你期望的 NSString。要确认这一点,您可以注销:TFLog(@"fid.class: %@", fid.class);这会记录课程,而不是描述,因此您可以查看您拥有的内容。NSNumber值 3 和NSString值 @"3" 都将注销为 3。

于 2013-04-12T05:52:19.993 回答