" [__ NSCFDictionary isEqualToString:]:无法识别的选择器发送到实例"没有实际调用方法的错误

时间:2014-02-20 10:11:21

标签: iphone

我收到了运行时错误。

 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary isEqualToString:]: unrecognized selector sent to instance 0x10b312190'

我调用方法isEqualToString的唯一地方是注释,控制流程远远超出方法调用所在的视图控制器。

我已多次清理项目并从模拟器中删除了应用程序。

我是iOS开发的新手,似乎可以精确地找到哪行代码生成运行时错误。它似乎发生在这个代码块中,该代码块在从isEqualToString:的调用所在的viewcontroller中展开后执行,其中任何情况都在注释中!

if ([_expenseDictionary objectForKey:@"Type"]!=[NSNull null])
{
    NSLog(@"Type: %@",[_expenseDictionary objectForKey:@"Type"]);
    _type_subTypeCellDetailTextLabel.text = [_expenseDictionary objectForKey:@"Type"];
}

断点显示错误发生在线......

    _type_subTypeCellDetailTextLabel.text = [_expenseDictionary objectForKey:@"Type"];

我只是不明白为什么。请帮帮我。

2 个答案:

答案 0 :(得分:1)

NSDictionary项下的_expenseDictionary下有一个@"Type",正如它所读取的那样。你必须修改这些代码部分。这些代码很好。

isEqualToString似乎在UIKit UILabel设置期间由text在内部调用。

你可以在设置之前通过检查NSStrings来解决它。

id value = [_expenseDictionary objectForKey:@"Type"];
if ([value isKindOfClass:[NSString class]])
{ _type_subTypeCellDetailTextLabel.text = value; }

答案 1 :(得分:0)

从我设法恢复的另一个id回复...

所以现在事实证明,调用选择器isEqualToString:是一个隐式API调用。就像我说的那样,我没有在任何地方打电话。

问题结果是,不是用字符串设置键“Type”的值而是意外地将字典(不同于_expenseDictionary)分配给键。隐式调用是由字典“接收”而不是预期的字符串。在为“key”类型设置正确的值(NSString)时进行更正解决了这个问题。