Как сохранить порядок элементов в CollectionView

xcode
ios
swift3

#1

День добрый!

Нахожусь в самом начале пути разработчика-свифтера, встала задача на стажировке: сохранить порядок CollectionView ячеек после закрытия приложения. Ячейки можно перетаскивать по длинному нажатию.

Вопрос: как сохранить порядок элементов в массиве, что лучше использовать? Код большой и чужой, пока мне сложно в нем ориентироваться. Должен ли я сохранять позиции при отрисовке ячеек или это происходит где-то в другом месте?

Мне намекнули, что рыться нужно где-то здесь:

 func setDefaultSettings() {
    
    // get settings from setting.plist
    if let path = Bundle.main.path(forResource: "Settings", ofType: "plist") {
        
        let settings = NSDictionary(contentsOfFile: path) as! Dictionary<String, Array<Dictionary<String, String>>> // [String: [[String: String]]]
        
        // insert to DB
        let context = dataManager.persistentContainer.viewContext
        
        for obj in settings["activities"]! {
            
            let activity = NSEntityDescription.insertNewObject(forEntityName: "Activity",
                                                               into: context) as! Activity
            activity.title = obj["title"]
            activity.image = UIImagePNGRepresentation(UIImage(named: obj["image"]!)!) as NSData?
            activity.indicatorTypes = [.speed, .distance, .speedAvarage, .timeStart, .time]
            activity.indicatorMapTypes = [.speed, .distance, .timeStart]
            
            let activityType = ActivityType(rawValue: obj["type"]!)!
            activity.typeValue = activityType
            if activityType == .walk {   // default type
                activity.isActive = true
            }
            
        }
        
        for obj in settings["indicators"]! {

            let indicator = NSEntityDescription.insertNewObject(forEntityName: "Indicator",
                                                                into: context) as! Indicator
            indicator.title = obj["title"]
            indicator.image = UIImagePNGRepresentation(UIImage(named: obj["image"]!)!) as NSData?
            indicator.typeValue = Indicator.IndicatorType(rawValue: obj["type"]!)!
        }
        
        dataManager.saveContext()
    }
}

Вот так выглядит plist