1

データを表示するために使用しUITableViewています。カスタマイズ ボタンと削除機能を使用して、選択した行を削除しようとしています。しかし、空のときにその関数内にアラートビューを配置したいのですが、UITableView内部のボタンを使用して、UIAlertView条件に応じてメインページと前のページに移動しようとしています。しかし、UITableViewが空になった後にクラッシュし、「Program received signal: “SIGABRT”」で削除ボタンを押しました。

私のコードは次のようになります。

    - (IBAction)DeleteButtonAction:(id)sender
    {   
        DMSAppDelegate *d = (DMSAppDelegate *)[[UIApplication sharedApplication] delegate];

        NSLog(@"Message From Custom Cell Received");

        if(d->newtableData.count != 0)
        {

            NSIndexPath *indexPath = [self.tablevieww2 indexPathForCell:(UITableViewCell *)[[[sender superview] superview] superview]];
            NSUInteger row = [indexPath row];
            [d->newtableDataQt removeObjectAtIndex:row];
            NSLog(@"data removed");
            [self.tablevieww2 reloadData];
        }   
        else
        {       
            UIAlertView *alertview=[[UIAlertView alloc] initWithTitle:@"hello" message:@"Warning!!: Table is empty" delegate:self cancelButtonTitle:@"Yes" otherButtonTitles:@"",@"No",nil];
            textfieldQty1 = [alertview textFieldAtIndex:0];
            textfieldQty1.keyboardType = UIKeyboardTypeNumberPad;
            textfieldQty1.keyboardAppearance = UIKeyboardAppearanceAlert;
            textfieldQty1.autocorrectionType = UITextAutocorrectionTypeNo;
            [alertview show];
            [alertview release];    
        }

    }

    - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
    {
        if (buttonIndex == 0) 
        {
            DMSViewController *bt=[[DMSViewController alloc]initWithNibName:nil bundle:nil];
            bt.modalTransitionStyle=UIModalTransitionStyleCrossDissolve;
            [self presentModalViewController:bt animated:YES];
        }
        else if (buttonIndex == 1)
        {
            NSString *newqty = [[NSString alloc] initWithFormat:@"%@",textfieldQty1.text];
            DMSAppDelegate *d= (DMSAppDelegate *)[[UIApplication sharedApplication] delegate];
            [d->newtableDataQt replaceObjectAtIndex:slCell1 withObject:(id)newqty];
            NSLog(@"tb%@",d->newtableDataQt);
            [self.tablevieww2 reloadData];  
            int total1=0;

            for ( int i=0 ; i < [d->newtableDataQt count];++i )
            {           
                NSString *string = [d->newtableDataQt objectAtIndex:i];

                NSLog(@"string%@",string);

                if ([string isEqualToString:@"0"])
                {

                }
                else
                {
                    NSLog(@"newArray%@",d->newtableDataPrice);
                    NSString *strP=[d->tableDataPrice objectAtIndex:i];
                    NSInteger sp=[strP integerValue];
                    NSInteger st=[string integerValue];
                    total1=total1+st*sp;
                    NSLog(@"total1%d",total1);
                }
            }

            NSString *newtotal1=[NSString stringWithFormat:@"%d",total1];
            DMSAppDelegate *d2 = (DMSAppDelegate   *) [[UIApplication sharedApplication] delegate];
            d2->totalD = [[NSString alloc] initWithString:newtotal1];
        }   
    }

    Please give me some solution. I am trying really hard from yesterday but not getting any success.
    Thanks in advance.
    @
4

1 に答える 1

1

次の 2 つのことを確認する必要があります。

最初:-if(d->newtableData.count != 0) は条件であり、アイテムをnewtableData削除してnewtableDataQtいないため、else メソッドが呼び出されないのはそのためです。newtableDatacount =0 になることはないからです。

第二に;-テーブルが空の場合newtableDataQt、値が含まれないことを意味し、空になります。削除ボタンをクリックすると、アラートビューが表示されます。その後、インデックス1のボタンをクリックすると、あなたが書いたコード:-

[d->newtableDataQt replaceObjectAtIndex:slCell1 withObject:(id)newqty];

sonewtableDataQtは以前はすでに空でしたが、現在はそれを使用しています。これがクラッシュの原因である可能性があります。

試す

if( [newtableDataQt count] >slCell1)
{    [d->newtableDataQt replaceObjectAtIndex:slCell1 withObject:(id)newqty];
}

お役に立てば幸いです。

于 2012-08-30T06:43:53.867 に答える