2016-12-29 3 views
5

У меня есть приложение, которое использует UICollectionView, и когда пользователь отбирает и удерживает ячейку, он позволяет пользователю перемещаться и изменять порядок позиции этой ячейки (подобно тому, как iOS позволяет вам для изменения порядка приложений на главном экране).Автоматическое переупорядочение UICollectionView в базовых данных с Swift

Конечно, изменение в порядке не сохраняется, и оно возвращается к своему прежнему порядку, когда вы покидаете представление и возвращаетесь. У меня было впечатление, что есть способ автоматически сохранить новый порядок ячеек в UITableView без явного написания всего в Core Data.

Как это сделать в UICollectionView? Или это невозможно, и мне придется писать все в Core Data вручную?

Edit: Текущий код Соответствующая:

@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() 
    } 
} 
+0

Возможно 'NSFetchedResultsController' является то, что вы после этого. Он предоставит вам мелкозернистые уведомления для всех обновлений/вставок/исключений в любой NSManagedObjectContext? –

ответ

1

Я думаю, вам нужно вручную сохранить его в Core Data после заказа сделано:

let context = self.fetchedResultsController.managedObjectContext 
let event = self.fetchedResultsController.object(at: indexPath) 
event.ordering = indexPath.row 
do { try context.save() } 
catch { } 
+0

Я * думаю * У меня есть версия того, о чем вы говорите выше (только что отредактировано). Я терпеть неудачу после того, как я перетаскиваю ее без вывода на консоль. Это показывает, что OrderChangeGroup является проблемой, хотя я не уверен, в чем проблема. В разделе 1 показано: «0 IndexPath.section.getter». Есть предположения? – user3246092

Смежные вопросы