2

ここに画像の説明を入力してください

キャッチされなかった例外'NSInvalidArgumentException'が原因でアプリを終了しています。理由:'-[__ NSArrayM objectForKey:]:認識されないセレクターがインスタンス0x12e654c0に送信されました。

2つのディクショナリオブジェクトを持つ配列からテーブルビューにデータをロードしています。コードが呼び出されたViewDidLoadが以下の場合、ディクショナリオブジェクトには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];

最初の行ではクラッシュしませんが、2番目の行ではindexPath.row==1で常にクラッシュします。以下のスクリーンショットを参照してください。手伝ってくれてありがとう

これがself.arrを再び埋めています-(void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController {if([datePicker1.CurrentDate length]){

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];

}

}
4

2 に答える 2

1

コードからif条件を削除します。2番目の辞書ではなく、最初の辞書を配列に追加しているだけです。

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

これを試して :)

于 2012-07-13T06:46:17.107 に答える
0

ご迷惑をおかけして申し訳ありませんが、実際の問題は、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 
于 2012-07-13T07:36:02.543 に答える