从TableView和数据库中删除单元格

时间:2014-01-24 19:54:51

标签: ios database sqlite tableview

我正在构建一个浏览器,我有一个数据库,用于存储浏览器的书签。

在我的“书签”表中,我有一个“ID(AUTOINCREMENT)”和一个“URL”字段。 问题是,当我删除任意ID时,我的数据库中仍有一个漏洞。像“ID1,ID2,ID700”...... 当我在TableView中列出它时,会跳过这些。

因此,行号1不一定是ID号1。

如何设法删除TableView中的行,同时从我的数据库中删除相应的字段(ID和URL)?

这是我的一段代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

//CRIA A CELULA DESTA LINHA DA TABELA
static NSString * CellIdentifier = @"Cell";
UITableViewCell * cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {
    //FAZ CACHE DA CELULA PARA EVITAR CRIAR MUITOS OBJETOS DESNECESSARIOS DURANTE O SCROLL
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}

//RECUPERA O NUMERO DA LINHA 0, 1, 2, 3...
NSInteger row = indexPath.row;

self.counter = 1;

NSString * bookmark = [[Dados sharedDB]getBookmark:row+1];

//TEXT
if ([bookmark isEqualToString:@"ERROR"]) {

    do {
        self.counter++;
        bookmark = [[Dados sharedDB]getBookmark:row+self.counter];
    } while ([bookmark isEqualToString:@"ERROR"]);
}

cell.textLabel.text = [NSString stringWithFormat:@"%@", bookmark];

return cell;

}

1 个答案:

答案 0 :(得分:0)

您必须首先删除数据库中的数据,然后从数据库中获取修改后的(新)数据并重新加载tableview。

它是如何工作的,你必须使用didSelectRowAtIndexPath方法来知道选择了哪一行。使用indexPath.row属性,确定该条目的ID(我相信您必须在显示之前获取数组中的所有数据)。然后,在数据库中,删除该特定条目。假设您正在使用核心数据,则必须获取该条目,将其删除,然后将其保存在托管对象上下文中。完成此操作后,获取所有数据并将其存储在视图控制器的数组中。最后,调用[self.tableview reloadData]

的方法