【发布时间】:2013-11-19 18:36:29
【问题描述】:
我正在尝试重新排序表格视图 - 已设置 canMoveRowAtIndexPath 和 moveRowAtIndexPath 以便在我处于编辑模式时可以拖动单元格,但我需要基本上在我的 sqlite 数据库中镜像这些更改有。我有一个名为“orderid”的列,我用它来跟踪单元格的顺序。我的方法是基本上将要移动的单元格设置为 orderid=9999,然后从其余受影响单元格的 orderid 中加或减 1,然后将新单元格设置为其目标 orderid。我认为这可能是一个 sql 错误,但我无法弄清楚。如果有人有任何建议,将不胜感激。
这些是我的方法:
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
return YES;
}
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath{
long source = (long)sourceIndexPath.row;
long dest = (long)destinationIndexPath.row;
source++;
dest++;
//reorder in db
NSString *sql;
if (source>dest) {
sql = [NSString stringWithFormat:@"UPDATE entries SET orderid=9999 where orderid=%ld; update entries set orderid = orderid + 1 where orderid<%ld AND orderid>=%ld update entries set orderid=%ld where orderid=9999", source, source,dest, dest];
} else if (source<dest){
sql = [NSString stringWithFormat:@"UPDATE entries SET orderid=9999 where orderid=%ld; update entries set orderid = orderid - 1 where orderid BETWEEN orderid>%ld AND orderid<=%ld; update entries set orderid=%ld where orderid=9999", source, source, dest, dest];
}
NSLog(@"%@", sql);
char *err;
if (sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) !=SQLITE_OK) {
sqlite3_close(db);
NSLog(@"could not reorder");
} else {
NSLog(@"rows reordered");
}
}
【问题讨论】:
标签: ios sql objective-c sqlite