【问题标题】:Reordering table row SQLite UITableView重新排序表行 SQLite UITableView
【发布时间】:2015-01-27 22:33:35
【问题描述】:

我正在尝试订购 UITableView 行。我已经实现了必要的方法,它适用于我的可变数组。但是我不知道如何将这些更改应用到我的数据库。

我的数据库有 favs 列 创建表favs ( id 整数非空主键自动增量, w_name文字 );

我正在使用“插入或替换到 favs (w_name) 值 ('%@%');”将新词插入 favs 数据库的语句。如何更改两条记录的 id,以便我可以按 id 的顺序列出 favs 值,以便对它们进行排序。例如,我想从这里更改我的表

id|w_name

1|苹果

2|香蕉

3|橙色

id|w_name

1|苹果

3|香蕉

2|橙色

如果键不是主键,我可以使用 UPDATE favs SET id = (CASE id WHEN 2 THEN 3 ELSE 2 END) WHERE id IN (2, 3);

如果我这样做,我需要在每次插入记录时自己计算 id。那么,如何重新排序 id 以便我在 UITableView 中的更改反映到数据库中。

【问题讨论】:

    标签: ios mysql objective-c sqlite uitableview


    【解决方案1】:

    在所有情况下,如果您想对 TableView 重新排序,您必须重新排序为 TableView 提供数据的数组。 您可以再次执行查询。 或者使用那个

    yourArray = [yourArray sortedArrayUsingComparator:^NSComparisonResult(TYPE *p1, TYPE *p2){
            return [p1 compare:p2];  
        }];
    

    并以[tableView reloadData];结束

    【讨论】:

    • 我对从 SQLite 数据库读取的数组重新排序没有问题。我的问题是如何将更改的订单保存到数据库中。
    • 哦,好吧,对不起。那么,我认为你不能。您要更改的是记录的物理顺序,那么,除非您删除所有这些记录以重新创建它们,否则我认为您不能。 (以编程方式)
    【解决方案2】:

    在您的表格中添加另一列并将其命名为排序。在那里,您将把每条记录的索引放在数组[array indexOfObject:object] 中。每次要保存数组的顺序时,都可以更新每条记录的排序列,例如 const char *sql = "UPDATE favs SET sort = ? WHERE id = ?"; if(sqlite3_prepare_v2(database, sql , -1, &updateStatment, NULL) != SQLITE_OK) NSAssert1(0, @"Error while creating update statement. '%s'", sqlite3_errmsg(database)); sqlite3_bind_int(updateStatment, 1, [array indexOfObject:object]); sqlite3_bind_int(updateStatment, 2, [object id]);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多