我收到了运行时错误。
*** 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"];
我只是不明白为什么。请帮帮我。
答案 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)时进行更正解决了这个问题。