【问题标题】:Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: NSArrayM objectForKey由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:NSArrayM objectForKey
【发布时间】:2012-07-12 23:57:03
【问题描述】:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[__NSArrayM objectForKey:]:无法识别的选择器发送到实例 0x12e654c0。

我正在从具有两个字典对象的 Array 中加载 tableview 上的数据。调用 ViewDidLoad 时的 Dictionary 对象包含 2 个 nsstring 对象,代码如下

while (sqlite3_step(statement) == SQLITE_ROW) {
    NSString* delID = [NSString stringWithUTF8String:(const char *) sqlite3_column_text(statement, 0)];
    NSString* name =[NSString stringWithUTF8String:(const char *) sqlite3_column_text(statement, 1)]; 


    NSMutableDictionary *dict=[NSMutableDictionary dictionary];
    [dict setObject:delID forKey:@"delID"];
    [dict setObject:name forKey:@"name"];
    [self.arr addObject:dict];

它永远不会在第一行崩溃,但在第二行 indexPath.row==1 它总是崩溃,请参阅下面的屏幕截图。感谢帮助

这是我再次填写 self.arr -(void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController { if ([datePicker1.CurrentDate 长度]) {

UIButton *btn=(UIButton*)[self.view viewWithTag:btnTag];
[btn setTitle:datePicker1.CurrentDate forState:UIControlStateNormal];
}

if ([self.searchDel.arrSelectDelAdd count ]) 
{
    [self.arr addObject:self.searchDel.arrSelectDelAdd];



    [self.tblDelivery reloadData];

}

}

【问题讨论】:

  • 因为第二行没有字典数据。你在做什么 if (i==0) { [self.arr addObject:dict];只有当“i”值为“0”时才会添加字典">请检查数组中有多少对象
  • 是的,你能看到上面的屏幕截图 dict 包含 1 个对象 delID=002;名称="";崩溃后我确实在调试器中打印了值
  • 请检查您的数组长度。 NSLog("Arrar Count %d", array.count);
  • 你能把整个函数放上去吗??
  • 你的dict 不是一个NSDictionary,它是一个NSArray,它包含一个字典在index:0

标签: objective-c ios


【解决方案1】:

从您的代码中删除 if 条件。因为它只是将第一个字典添加到数组中,而不是第二个。

//if (i==0){
        [self.arr addObject:dict];
//}

试试这个:)

【讨论】:

  • 实际上它服务于另一个目的 viewDidLoad 之后我在数组中有 2 个对象。并且 Return numberOfRowsinSection [arr count] 为 2
【解决方案2】:

很抱歉打扰大家其实问题是我正在添加第二个或其他对象,例如

[self.arr addObject:self.searchDel.arrSelectDelAdd]; //Incorrect, that is adding NSArray type not dictionary

然后在 cellForRowAtIndexPath 中获取值

NSDictionary *dict=[arr objectAtIndex:indexPath.row];//here dict will contain NSSArray type not dict type object its causing to crash app.

cell.lblID.text=(NSString*)[dict objectForKey:@"delID"];// at this line.
cell.lblName.text=(NSString*)[dict objectForKey:@"name"];


[self.arr addObjectsFromArray:self.searchDel.arrSelectDelAdd]; // correct, thats the solution giving contents of NSSArray and now working my code 

【讨论】:

    猜你喜欢
    • 2013-04-27
    • 2018-04-05
    • 2021-09-17
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多