在swift中,在由迭代的索引值管理的循环中,我想创建一个变量,其变量名称是"person_"和当前循环索引的串联.
所以我的循环最终创建变量,如:
var person_0 = ...
var person_1 = ...
var person_2 = ...
etc...
Run Code Online (Sandbox Code Playgroud)
我没有在线搜索,所以我在这里发帖.
谢谢!
我在Swift iOS应用程序中有一个tableView,允许用户重新排序行.点击编辑按钮,可以重新排序或删除行,并重新点击编辑按钮(现在显示为完成)以完成该过程.
如果我只是使用tableView:moveRowAtIndexPath:toIndexPath:方法,它的工作原理如上所述,表格在点击Done时正确显示了重新排序的行.但是当它返回到表时它不记得新的顺序,所以我在核心数据中添加了一个新的"位置"变量(Int),并且我已经根据它对我的表进行了排序.
我的问题是,在用户移动一行并单击"完成"后,该表会立即将自身重新排序回原来的状态.因此,在我的代码可以正确捕获新订单并将其重新写入核心数据之前,它在核心数据中使用旧的(原始)位置变量.
有没有办法在表重新加载之前单击Done时捕获此新订单?
这是我处理移动的代码:
func tableView(tableView: UITableView!, moveRowAtIndexPath sourceIndexPath: NSIndexPath!, toIndexPath destinationIndexPath: NSIndexPath!) {
}
Run Code Online (Sandbox Code Playgroud)
这是我按下Done时调用的代码.我遍历表格的每一行,并根据它的新行在核心数据中重新分配人员的位置变量:
for currentIteration in 0..<tableView.numberOfRowsInSection(0) {
var indexPathForCurrentIteration = NSIndexPath(forRow: currentIteration, inSection: 0)
let personAtCurrentIndexIteration = fetchedResultsController.objectAtIndexPath(indexPathForCurrentIteration) as PersonModel
personAtCurrentIndexIteration.position = indexPathForCurrentIteration.row
println("\(personAtCurrentIndexIteration.name) has a position value of \(personAtCurrentIndexIteration.position)")
(UIApplication.sharedApplication().delegate as AppDelegate).saveContext()
tableView.reloadData();
}
Run Code Online (Sandbox Code Playgroud)
按下完成按钮时会调用上面的命令,但我也尝试在moveRowAtIndexPath方法中调用它而没有成功(相同的结果 - 当按下Done时它会重新加载表的旧顺序).我也试过注释掉reloadData而没有成功.
我认为我的问题可能在于以上事实并未捕获新的行顺序,而是仍然获得旧的行顺序.如果是这种情况,那么我不知道让它"等待"获得新行顺序的最简单方法.
我开始考虑的一个更长的解决方法是捕获移动的行的初始和最终行值,并根据该更新相应地保留剩余行的值.有些代码在下面,但我停止了,因为我认为可能有更聪明的方法.
if((sourceIndexPath.row > indexPathForCurrentIteration.row) && (destinationIndexPath.row > indexPathForCurrentIteration.row)) {
//if the moved row was ahead of this row before AND after the move, do nothing …Run Code Online (Sandbox Code Playgroud)