ios - 使用 UITableView 时应用程序崩溃

标签 ios objective-c uitableview

在第一个屏幕上,用户输入数据并使用 prepareforsegue 方法在第二个 ViewController 中显示它。在第二个屏幕上,用户选择多行进行删除,然后用户再次选择剩余的行进行删除应用程序崩溃。这是我的代码

* Terminating app due to uncaught exception 'NSRangeException', reason: '* -[NSMutableArray removeObjectsAtIndexes:]: index 5 in index set beyond bounds [0 .. 4]'

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return mAryValue.count;
}



-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString * strIdent=@"id1Cell";

    UITableViewCell * cell=[tableView dequeueReusableCellWithIdentifier:strIdent];

    if (cell==nil)
    {
        cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:strIdent];
    }

    cell.textLabel.text=[mAryValue objectAtIndex:indexPath.row];

    return cell;

}
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewCellEditingStyleDelete;
}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (self.editing)
    {
        return;
    }

    [_tblView deselectRowAtIndexPath:[_tblView indexPathForSelectedRow] animated:NO];
    UITableViewCell *cell = [_tblView cellForRowAtIndexPath:indexPath];
    if (cell.accessoryType == UITableViewCellAccessoryNone)
    {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
        [mArySel addObject:indexPath];
    }
    else if(cell.accessoryType == UITableViewCellAccessoryCheckmark)
    {
        cell.accessoryType = UITableViewCellAccessoryNone;
        [mArySel removeObjectIdenticalTo:indexPath];
    }  
}

-(void)getData:(NSMutableArray *)userValues
{
    mAryValue=userValues;
}

- (IBAction)btnDelete:(id)sender
{
        if (mAryValue==nil || mAryValue.count==0)
        {

            UIAlertController * alert=   [UIAlertController
                                          alertControllerWithTitle:@"Alert"
                                          message:@"Please Enter Value"
                                          preferredStyle:UIAlertControllerStyleAlert];

            UIAlertAction* ok = [UIAlertAction
                                 actionWithTitle:@"OK"
                                 style:UIAlertActionStyleDefault
                                 handler:^(UIAlertAction * action)
                                 {
                                     [alert dismissViewControllerAnimated:YES completion:nil];

                                 }];
            UIAlertAction* cancel = [UIAlertAction
                                     actionWithTitle:@"Cancel"
                                     style:UIAlertActionStyleDefault
                                     handler:^(UIAlertAction * action)
                                     {
                                         [alert dismissViewControllerAnimated:YES completion:nil];

                                     }];

            [alert addAction:ok];
            [alert addAction:cancel];

            [self presentViewController:alert animated:YES completion:nil];
        }
    else
    {
        NSMutableIndexSet *indicesToDelete = [[NSMutableIndexSet alloc] init];
        for (NSIndexPath *indexPath in mArySel)
        {
            [indicesToDelete addIndex:indexPath.row];
        }

        if (!(indicesToDelete==nil) || !(indicesToDelete.count==0))
        {
            [mAryValue removeObjectsAtIndexes:indicesToDelete];

        }
        [_tblView reloadData];
    }


}

请给我建议。 谢谢。

最佳答案

[NSMutableArray removeObjectsAtIndexes:]: index 5 in index set beyond bounds [0 .. 4]'

您正试图从您的数组 的索引处移除一个不存在的对象。如错误所述,您要删除 objectAtIndex:5,但您的数组只有 4 个项目。

[mAryValue removeObjectsAtIndexes:indicesToDelete];

关于ios - 使用 UITableView 时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42294603/

相关文章:

ios - Xcode SpriteKit 枚举 ChildNode WithName 与托管数组

ios - 自定义枚举案例的 UIView 扩展中的新属性

ios - 从 ViewController 内部调用 MainViewController 的方法 didselectrowatindexpath Objective c

ios - uitableviewcell 中的自动布局问题

iphone - NSIndexPath 在 iOS5 上崩溃

c++ - OpenGL ES - 纹理球体

objective-c - 尝试理解 nibs 中的 First Responder 对象

iphone - Cocos2d-iPhone中继承CCSprite

iphone - 在 UITableView 中使用开关

ios - 如何更新在 UITableViewCell 中添加的 View ?