テーブルビューを並べ替えようとしています - 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");
}
}