我正在尝试查找一个代码示例,该示例演示了如何使用核心数据处理tableView中的移动/重新排列单元格。我可以移动elimenty数组。如何更新核心数据(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]
}
答案 0 :(得分:0)
为Core数据中的每个条目保留唯一ID。当您对任何对象进行任何修改时,例如移动对象或只更新内容,您只需使用该唯一ID保存核心数据实例以及更新的数据。无需将其移除并再次插入。只需拨打“保存”即可完成剩下的工作。
例如,对应于第2行的值为“AAA”,同一个的唯一ID为2(由您设置或从服务器获取) 现在,您要将对应于第2行的值更改为“AA”,将其链接到唯一ID(在本例中为2),然后将其保存。
答案 1 :(得分:0)
我添加了一个ID来跟踪核心数据中每个属性的位置。在此示例中,我将其称为“ 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()
}
此外,我刚刚在load函数中添加了sortDescriptior。到目前为止,一切都在我的代码中有效。
// Add this to your fetch request
request.sortDescriptors = [NSSortDescriptor(key: "positionInTable", ascending: true)]