CoreDataのエンティティをNSFetchedResultsControllerで表示するUICollectionViewがあります。スクリーンショットでわかるように、ユーザーは境界線でマークされた複数のセルを選択できます。UICollectionView + NSFetchedResultsController内のセルを並べ替える
私のモデルは基本的にUICollectionViewを経由して選択を処理するための単なる文字列やブール値を持っています。
var url: String
var selected: Bool
var section:Section
私はUICollectionViewCells
の並べ替えをサポートするためにfunc collectionView(_ collectionView: UICollectionView, moveItemAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath)
を実装しています。ドラッグアンドドロップ操作はうまくいきますが、移動したアイテムをCoreDataに保存するのには苦労しています。モデルにposition
プロパティを追加する必要がありますか?
func collectionView(_ collectionView: UICollectionView, moveItemAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
var sourceArray = self.fetchedResultController.fetchedObjects
let item = sourceArray?.remove(at: sourceIndexPath.item)
sourceArray?.insert(item!, at: destinationIndexPath.row)
coreData.saveContext()
}
私は、このプロパティは読み取り専用ですので、wokringされていない、直接を修正しようとしました。どのような最善の方法は&をドロップするUICollectionView
とNSFetchedResultsController
とドロップします。
EDIT:UICollectionView
の
初期ソートがSection
モデルのインデックスプロパティに基づいています。現在、セクションのソートキーだけがあり、セクション内のアイテムはありません。
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "section.index", ascending: false)]
let resultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: managedObjectContext, sectionNameKeyPath:"section.name", cacheName: nil)
どのようにアイテムを並べ替えてコレクションビューに表示するのですか? –
質問を更新しました。セクションのソートは、セクションモデルのプロパティに基づいています。 – nor0x