NSDictionary到NSMutableArray崩溃

时间:2019-01-08 21:18:39

标签: objective-c nsmutablearray nsdictionary

下面的代码从Category1 Category2 Category3 Category4 No change Presentation Changed No change Scroll Changed 获取值,从对象获取值,然后将它们添加到另一个NSMutableArray中以供使用。我需要做的是为NSMutableArray中的每一项添加新行,但是崩溃了:

  

[__ NSSingleObjectArrayI length]:无法识别的选择器已发送到实例

如果我注释掉NSMutableArray *options中的代码并只留下for (int i = 0; i < options.count; i++),它将显示正确的值。有什么想法吗?

NSLog(@"FIELD)

2 个答案:

答案 0 :(得分:0)

您的数组中的对象很可能根本不是NSString,它们是包含NSString的NSArray。尝试在objectAtIndex调用后停止在调试器中并打印[field class]

答案 1 :(得分:0)

这并不是真正的答案,而只是为了帮助您调试。 NSLog非常有助于调试代码。在这些行中添加以下NSLog,并亲自查看其内容。

NSMutableArray *options = [[NSMutableArray alloc] init];
for (NSDictionary *item in self.surveydata) {
    NSString *addressfield = [item objectForKey:@"address_option"];
    NSLog("addressfield :%@",addressfield); // HERE
    [options addObject:addressfield];
}
NSLog("options:%@",options);// HERE

for (int i = 0; i < options.count; i++) {
    NSString *field = [options objectAtIndex:i];
    LFFormRowTextField *rowTextField = [LFFormRowTextField new];
    rowTextField.key = @"name";
    [rowTextField addValue:field forSEL:@selector(setPlaceholder:)];
    [sectionLabel addRow:rowTextField];

    NSLog(@"FIELD: %@", field);
}

您的代码有一些陷阱。例如,如果addressfield不返回NSString而是返回NULL或NSNumber或其他?优良作法是始终在分配对象之前检查从objectForKey返回的对象的类型。除非您可以保证数据仅包含字符串。如果来自第三方Web API, 那么我几乎可以说各种垃圾都将被发送出去。 :D 祝你好运。