1
8
通常,当您看到这样的工件时,正在发生的事情是,用户界面已经动画到一个新的位置并告诉了您关于它的信息,那么您对模型所做的更新并不能正确地反映出在视图下次必须引用模型进行更新时会导致故障的状态。 我认为你不完全理解你在这个方法中应该做什么。之所以调用它是因为UI已经更改,它需要让模型相应地更改。下面的代码假定结果已经是新的顺序,您只需要出于某种原因重置“顺序”字段:
关键是,您实际上并没有更改基础模型中的顺序。这些索引路径来自uitableviewcontroller,它告诉您用户在这些路径之间拖动到点,您需要根据更新基础数据。但是,FetchedResultsController始终是按排序顺序排列的,因此,在更改这些属性之前,不会移动任何内容。 问题是,它们没有被移动,您被调用来告诉您需要移动它们(通过调整Sortable属性)。你真正需要的是:
这将导致对象重新排序,然后遍历并清除其他应该向上移动的对象的任何顺序号,同时注意索引可能已移动。 |
2
7
下面是现在正式工作的内容,包括删除、移动和插入。每当有编辑操作影响订单时,我都会“验证”订单。
|
3
5
在表视图中移动行时, 实际上,您将一块其他行(至少由一行组成)移动到另一个方向。 同时。技巧是只更新此块和已移动项的DisplayOrder属性。 首先,确保根据表的当前显示顺序设置所有行的DisplayOrder属性。我们不必在此处保存上下文,我们将在实际移动操作完成后保存它:
然后,您只需更新移动项的位置以及fromindexpath和toindexxpath之间的所有项的位置:
|
4
5
最好的答案实际上是克林特·哈里斯对这个问题的评论: http://www.cimgf.com/2010/06/05/re-ordering-nsfetchedresultscontroller
为了快速总结,最基本的部分是在您试图重新排列的对象上有一个DisplayOrder属性,其中包含该字段上获取的结果控制器排序的排序描述。代码
苹果文档还包含重要提示: 这也在 How to implement re-ordering of CoreData records? 引用苹果文档:
|
5
1
工作台移动时无法重新加载,请稍后重新加载,这样就可以了。 |
6
1
对不起,格雷格,我肯定我做错了什么,但你的回答对我不起作用。 尽管我的所有对象都正确验证,但当我退出编辑模式时,其中一行冻结(编辑控件不会消失),单元随后不会正确响应。 也许我的问题是我不知道如何使用你设置的移动属性(self.moving=yes)。你能澄清一下吗?非常感谢你。 乔治 |
7
1
这是实现此类功能的非常困难的方法。 这里可以找到更简单和优雅的方式: UITableView Core Data reordering |
8
1
可以使用[<gt;ISediting]确定是否启用了表的编辑。而不是按照下面的语句建议延迟 [表performselector:@selector(reloaddata)withobject:nil afterdelay:0.02]; |
user8977455 · coredata中的更新不正确 6 年前 |
ashwin nath · 如何持久化tableview行? 6 年前 |
Mark J · 如何获取扩展以返回子类类型[重复] 6 年前 |
user3227546 · 基于搜索文本筛选核心数据项 6 年前 |