-[__NSDictionaryM objectAtIndex:]:无法识别的选择器发送到实例

Posted

技术标签:

【中文标题】-[__NSDictionaryM objectAtIndex:]:无法识别的选择器发送到实例【英文标题】:-[__NSDictionaryM objectAtIndex:]: unrecognized selector sent to instance 【发布时间】:2015-01-28 05:49:38 【问题描述】:

我在 SO 上搜索了所有可能的组合和答案,但对我没有多大帮助。 所有都只与UITableView 相关。

我正在做的是从服务器获取我的测验。 测验包含部分,每个部分都包含问题。 所以流量是这样的。 测验->部分->问题

我得到 JSON 之类的 测验的第一个总数, 然后特别是测验的部分总数 以及特定部分的问题总数。

我将部分存储在部分数组中,并根据部分数组计数解析问题。 但是我的应用程序崩溃了,我从部分数组中获取问题对象并将其存储在NSMutableDictionary 中,并带有与 DTO 连接的键。

这是我的代码..

NSArray *sectionsA = [quizD objectForKey:@"sections"];
NSMutableArray *sectionDTOA = [[NSMutableArray alloc]init];
NSMutableArray* questionDTOA=[[NSMutableArray alloc] init];

for (int i =0; i<[sectionsA count]; i++)

NSMutableDictionary* sectionD = [sectionsA objectAtIndex:i];
SectionDTO* sectionDTO = [[SectionDTO alloc]init];
[sectionDTO setSection_id:[sectionD objectForKey:@"sectionID"]];
[sectionDTO setSection_name:[sectionD objectForKey:@"sectionDTitle"]];
[sectionDTO setSection_description:[sectionD objectForKey:@"sectionDDesc"]];
[sectionDTO setSectionCutoff:[sectionD objectForKey:@"sectionCutoff"]];

// 设置问题的代码在下面,然后 for 循环关闭..

我的应用程序崩溃了

NSMutableDictionary* sectionD = [sectionsA objectAtIndex:i];

这么说

-[__NSDictionaryM objectAtIndex:]: unrecognized selector sent to instance 

我的代码有什么问题, 我尝试获取数组,然后获取键值对,但没有帮助。 请指导我。

提前致谢。

【问题讨论】:

【参考方案1】:
NSArray *sectionsA = [quizD objectForKey:@"sections"];

返回值应该是NSDictionary,而不是NSArray

以下演示代码可能对您有所帮助:

NSArray *sectionsA = nil;  
id sectionsObj = [quizD objectForKey:@"sections"];
if([sectionsObj isKindOfClass:[Dictionary class]])
     sectionsA = sectionsObj[@"keyForArray"];  //@"keyForArray" is the key for array

else if([sectionsObj isKindOfClass:[NSArray class]])
    sectionsA = sectionsObj;

【讨论】:

以上是关于-[__NSDictionaryM objectAtIndex:]:无法识别的选择器发送到实例的主要内容,如果未能解决你的问题,请参考以下文章

ObjectA.Signal.connect(ObjectB.Slot) 不工作。我的理解正确吗?

Flink 使用另一个 ObjectA 流中的 List<ObjectB> 创建新的 ObjectB 流

Qt socket中怎么传结构体?

如何根据相关对象集合的属性对 Core Data 结果进行排序?

使用 ARC 的 Objective-C 代表

OCMock 期望在另一个方法中调用一个方法