“[__NSArrayM objectForKey:]:无法识别的选择器”尝试从字典中检索字符串时
Posted
技术标签:
【中文标题】“[__NSArrayM objectForKey:]:无法识别的选择器”尝试从字典中检索字符串时【英文标题】:"[__NSArrayM objectForKey:]: unrecognized selector" when trying to retrieve a string from Dictionary 【发布时间】:2013-09-11 14:25:58 【问题描述】:我正在尝试为我的标签设置文本。代码如下:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
newsDataCell *cell = (newsDataCell*)[tableView dequeueReusableCellWithIdentifier:@"newsData"];
if (cell == nil)
cell = [[newsDataCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"newsData"];
NSDictionary* currentrow =[self.Items objectAtIndex:indexPath.item];
NSLog(@"currentrow:%@",currentrow);
//UIImageView *image = (UIImageView*)[cell viewWithTag:0];
UILabel *txtData = (UILabel*)[cell viewWithTag:1];
NSString *testo = [currentrow objectForKey:@"Date"];
[txtData setText:testo];
UILabel *txtTitolo = (UILabel*)[cell viewWithTag:2];
txtTitolo.text =[currentrow valueForKey:@"Title"];
UILabel *txtDescrizione = (UILabel*)[cell viewWithTag:3];
txtDescrizione.text = [currentrow valueForKey:@"Descr"];
return cell;
我检查并且 currentrow 实际上包含该对象。 这是我从 Xcode 得到的错误:
2013-09-11 16:04:36.468 ApplicationName[2409:c07] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSArrayM objectForKey:]: 无法识别的选择器发送到实例 0x7172f80' *** 首先抛出调用堆栈: (0x1333012 0x1158e7e 0x13be4bd 0x1322bbc 0x1322294e 0xc5f4 0x1578fb 0x1579cf 0x1401bb 0x150b4b 0xed2dd 0x1165bf6b0 0x265bfc0 0x265033c 0x2650150 0x25ce0bc 0x25cf227 0x25cf8e2 0x12fbafe 0x12fba3d 0x12d97c2 0x12d8f44 0x12d8e1b 0x22757e3 0x2275668 0x9cffc 0x2c2d 0x2b55) libc++abi.dylib:终止调用抛出异常
我使用 valueForKey 得到同样的错误:
txtTitolo.text =[currentrow valueForKey:@"Title"];
这里是:
2013-09-11 16:09:34.478 ApplicationName[2409:c07] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSArrayM valueForKey:]: 无法识别的选择器发送到实例 0x7172f80' *** 首先抛出调用堆栈: (0x1333012 0x1158e7e 0x13be4bd 0x1322bbc 0x1322294e 0xc5f4 0x1578fb 0x1579cf 0x1401bb 0x150b4b 0xed2dd 0x1165bf6b0 0x265bfc0 0x265033c 0x2650150 0x25ce0bc 0x25cf227 0x25cf8e2 0x12fbafe 0x12fba3d 0x12d97c2 0x12d8f44 0x12d8e1b 0x22757e3 0x2275668 0x9cffc 0x2c2d 0x2b55) libc++abi.dylib:终止调用抛出异常
怎么了?
【问题讨论】:
看起来 currentrow 得到的是一个数组而不是一个字典。 self.items 中有什么? 【参考方案1】:看起来currentrow
不是NSDictionary
(您假设)。这是一个NSArray
。
NSDictionary* currentrow =[self.Items objectAtIndex:indexPath.item];
// Not a dictionary, it is an array.
这就是您遇到此崩溃的原因。如果这是解析的 JSON 响应,请检查 JSON 的结构。
希望有帮助!
【讨论】:
即使它是一个数组 "valueForKey" 也应该可以工作并检索字符串。我错了吗?? @nicky_1525 您所说的valueForKey:
不应该在您尝试使用时使用。它适用于键值观察(KVO)编码。
好的,还有其他建议吗?如何检索字符串?
@nicky_1525 结构是什么? currentrow
应该是字典数组还是其他东西?
Currentrow 应该包含 tableview 行索引处对象的所有键和值。如果是这样,我可以获取值并在我的 tableviewcell 中填充我的所有标签。【参考方案2】:
我做到了!我刚刚使用了“stringWithFormat”,它的工作原理是这样的:
NSString *testo = [NSString stringWithFormat:@"%@",[currentrow objectForKey:@"Date"]];
还是谢谢你的回答!
【讨论】:
【参考方案3】:A.此错误不是 Xcode 产生的,而是运行时环境产生的。
B.这意味着 currentrow 不是字典而是数组。
C.你是怎么检查的?您在哪里创建项目并将其放入列表中?
【讨论】:
Items 是一个 NSMutableArray,它使用来自我反序列化和正确读取的 json 文件的对象进行初始化。 items 中的每一项都是一个数组。你有一个数组数组。您如何创建单个项目?【参考方案4】:对我来说这是可行的。
customerBillerFieldsArray = [self.detailItem valueForKey:@"customerBillerFileds"];
之前我用customerBillerFieldsArray = [self.detailItem objectForKey:@"customerBillerFileds"];
【讨论】:
以上是关于“[__NSArrayM objectForKey:]:无法识别的选择器”尝试从字典中检索字符串时的主要内容,如果未能解决你的问题,请参考以下文章