-[__NSCFDictionary Title]:无法识别的选择器发送到实例
Posted
技术标签:
【中文标题】-[__NSCFDictionary Title]:无法识别的选择器发送到实例【英文标题】:-[__NSCFDictionary Title]: unrecognized selector sent to instance 【发布时间】:2015-11-25 15:34:49 【问题描述】:我创建了一个应用程序,它从我从本地主机提取的 JSON 数据填充一个表。我可以使用搜索栏搜索这些数据,并添加了一个按钮来将行添加到另一个表,我正在使用一个库来存储用户最喜欢的对象。所以现在我已经全部工作了,我正在尝试创建一个详细视图,当用户单击表中的一行时,他们会被带到一个新的视图控制器,然后他们可以查看对象的完整详细信息作为行初始表仅在每一行中列出了标题和作者。
我已经制作了 Segue 并创建了视图控制器等,当我尝试在 detaiViewController
上填充几个 UILabel
s 时,我收到一个错误:
【问题讨论】:
我猜?[_papers objectAtIndex:self.listTableView.indexPathForSelectedRow.row]
是 NSDictionary
对象,而不是 Paper
对象。
还有一个很好的提示:-[__NSCFDictionary Title]: unrecognized selector 如果您尝试向 NSDictionary 发送 Title: 消息,您会得到它:-)
你为什么要使用weak
属性,你明白它的作用吗?
您需要展示如何解析您的 JSON,如何填充 _papers
。
好的。你应该为你的 UITableView 使用locations
而不是_papers
。换句话说,_papers
是 JSON 数组,locations
是 PARSED JSON 数组。所以Paper *myPaper = [locations objectAtIndex:self.listTableView.indexPathForSelectedRow.row];
应该可以工作,但我建议在self.listTableView
的数据源/委托方法中的其他位置使用位置。
【参考方案1】:
也许论文字典存储其他 NSDictionary,而不是 Paper 对象。解析 JSON 时会解析为 ios SDK 类,如 [] 解析为 NSArray,"" 解析为 NSString, 解析为 NSDictionary。
所以,我猜你的 JSON 会解析成一个字典数组。它不能为您返回论文。您必须将每个字典中的值分配给您的一个 Paper,并将其放入一个 NSArray of Paper。
【讨论】:
【参考方案2】:变化:
self.Title.text = self.paper.Title;
到:
self.Title.text = self.paper[@"Title"];
使用 awakeFromNib 代替 viewDidLoad
【讨论】:
这绝对是一个正确的想法。当我立即在其中输入此内容时,不会生成“在对象类型 Paper 上找不到读取字典元素的预期方法” 你有机会介绍一下你的 Paper 课程吗? 这应该是一些额外的信息,现在我已经编辑了问题【参考方案3】:NSMutableArray *locations = [[NSMutableArray alloc] init];
_papers = [json objectForKey:@"Papers"];
您正在从 _papers 中检索元素来填充位置数组。实际上 _papers 包含 NSDictionaries 列表,当在 prepareForsegue 中时,您只需从 _papers 中获取一个元素,这是一个字典,这就是它给出错误的原因。您必须存储此位置数组并从中检索元素,因为您正在循环中将 json 解析为纸质文件并将其放置在位置,希望对您有所帮助。
【讨论】:
以上是关于-[__NSCFDictionary Title]:无法识别的选择器发送到实例的主要内容,如果未能解决你的问题,请参考以下文章
UITabBarItem title 和self.title设置不同的标题