0

我正在尝试找到一个代码示例,该示例显示如何使用核心数据处理 tableView 中的移动/重新排列单元格。我可以移动元素数组。如何更新核心数据(Mybase)?

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
NSFetchRequest* fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription* entityDescription = [NSEntityDescription entityForName:@"Mybase"
                                                     inManagedObjectContext:self.objectContext];
[fetchRequest setEntity:entityDescription];

empArray = [(NSArray*)[self.objectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];

Mybase *employee = [empArray objectAtIndex:fromIndexPath.row];

[empArray removeObject: employee];
[empArray insertObject: employee atIndex:toIndexPath.row]
}
4

2 回答 2

0

为核心数据中的每个条目保留一个唯一的 ID。当您对任何对象进行任何修改时,例如移动对象或仅更新内容,您只需使用该唯一 ID 保存核心数据实例和更新的数据。无需将其移除并重新插入。只需调用“保存”,剩下的就交给它了。

例如,第2行对应的值为'AAA',相同的唯一ID为2(由你设置或从服务器获取)现在你想将对应于第2行的值更改为'AA',将其链接到唯一 ID(在本例中为 2),然后保存。

于 2013-10-15T12:49:15.890 回答
0

我添加了一个 id 来跟踪 Core Data 中每个属性的位置。在此示例中,我将其称为“positionInTable”。此外,我使用 for 循环来更新这些值,总是在移动单元格时。

override func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
        let movedObject = self.itemArray[sourceIndexPath.row]
        itemArray.remove(at: sourceIndexPath.row)
        itemArray.insert(movedObject, at: destinationIndexPath.row)

        var positionStart = 0

        for item in itemArray {
            item.positionInTable = Int32(positionStart)
            positionStart += 1
        }

        saveData()
    }

此外,我只是在加载函数中添加了一个 sortDescriptior。到目前为止,一切都在我的代码中运行。

// Add this to your fetch request
request.sortDescriptors = [NSSortDescriptor(key: "positionInTable", ascending: true)]
于 2019-12-20T18:34:07.790 回答