使用Swift自动重新排序核心数据中的UICollectionView

use*_*092 5 iphone ios uicollectionview swift

我有一个使用UICollectionView的应用程序,当用户点击并保持在单元格上时,它允许用户转移并重新排序该单元格的位置(类似于iOS允许您重新排序主屏幕上的应用程序的方式).

当然,订单的更改不会保存,当您离开视图并返回时,它会返回到旧订单.我的印象是有一种方法可以在UITableView中自动保存新的单元格顺序,而无需在Core Data中明确写出所有内容.

我怎么能在UICollectionView中做到这一点?或者这是不可能的,我将不得不手动将所有内容写入Core Data?

编辑:当前相关代码:

@IBOutlet weak var groupCollection: UICollectionView!
var longPressGesture : UILongPressGestureRecognizer?
var newGroupOrderNum : Int?
let indexPath : IndexPath = []
var aryGroup : NSMutableArray!

func handleLongGesture(gesture: UILongPressGestureRecognizer) {

    switch(gesture.state) {

    case UIGestureRecognizerState.began:
        guard let selectedIndexPath = self.groupCollection.indexPathForItem(at: gesture.location(in: self.groupCollection)) else {
            break
        }
        groupCollection.beginInteractiveMovementForItem(at: selectedIndexPath)
    case UIGestureRecognizerState.changed:
        groupCollection.updateInteractiveMovementTargetPosition(gesture.location(in: gesture.view!))
    case UIGestureRecognizerState.ended:
        groupCollection.endInteractiveMovement()
        var timestamp: Date {
            return Date()
        }
        let creationTime = timestamp

        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        let managedContext = appDelegate.managedObjectContext
        let entity =  NSEntityDescription.entity(forEntityName: "Group", in:managedContext)
        let group = NSManagedObject(entity: entity!, insertInto: managedContext)

        let orderChangeGroup = aryGroup.object(at: indexPath.row)
        group.setValue(orderChangeGroup, forKey: "groupOrderNum")

        do {
            try managedContext.save()
        }
        catch let error as NSError  {
            print("Could not save \(error), \(error.userInfo)")
        }

        group.setValue(creationTime, forKey: "creationTime")
    default:
        groupCollection.cancelInteractiveMovement()
    }
}
Run Code Online (Sandbox Code Playgroud)

bub*_*uxu 1

我认为您需要在订购完成后手动将其保存到核心数据:

let context = self.fetchedResultsController.managedObjectContext
let event = self.fetchedResultsController.object(at: indexPath)
event.ordering = indexPath.row
do { try context.save() }
catch { }
Run Code Online (Sandbox Code Playgroud)