从uitableview的数据提供者中删除项目

时间:2015-02-05 19:52:49

标签: ios objective-c iphone

IOS newb尝试使用可重复使用的单元格从表格视图中删除项目。我如何知道我需要删除哪个项目以及如何删除它。数据来自网络调用,单元格有自己的xib / class。我在单元类上放置了一个属性,以便能够获取它们的数据。这是我目前的代码。它在尝试从数据提供程序中删除项目时崩溃。

 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
if(editingStyle == UITableViewCellEditingStyleDelete){
    //find object to be deleted
    MessagesCell *curCell = (MessagesCell *)[tableView cellForRowAtIndexPath:indexPath];

    for (int i=0;i<[messagesArray count]; i++) {
        if ([[CommonAPI checkForNullNumber:curCell.allData[@"id"]] integerValue] ==[[CommonAPI checkForNullNumber:((NSDictionary *)[messagesArray objectAtIndex:i])[@"id"]] integerValue]) {
            [messagesArray removeObjectAtIndex:i];
        }
    }
}
[messagesTable reloadData];
}

它进入remove调用,所以我怀疑它是我的循环,即使必须有更好的方法从dataprovider中查找单元格的数据。无论如何,提前谢谢。

2 个答案:

答案 0 :(得分:0)

首先,你要删除和更新对象

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
       MyClass * object = [messagesArray objectAtIndex:indexPath.row];
        [messagesArray removeObject:object];
        [tableView deleteRowsAtIndexPaths:[NSMutableArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];

    }
}

答案 1 :(得分:0)

纽比问题。我在网络调用的响应中从数组字典中实例化了nsMutableArray。所以我将nsmutable数组实例化为NSArray。当你试图改变它中的任何元素时,它会死亡。因此,为了解决这个问题,我正确地实例化了数组。

所以错误的方法是

 messagesArray = response[@"data"];

正确的方式

 messagesArray = [[NSMutableArray alloc] initWithArray:response[@"data"]];

感谢您的帮助。