как сохранить смешанную сортировку? - PullRequest
1 голос
/ 23 марта 2020

Из списка, в котором находятся слова, мне нужно отобразить их в смешанном состоянии. Чтобы сделать это, я добавил поле случайной сортировки к сущности

func setShuffleWords(id: UUID?) -> [CoreWord]? {
    guard let id = id else { return nil }
    let requestWords = NSFetchRequest<NSFetchRequestResult>(entityName: "CoreWord")
    requestWords.predicate = NSPredicate(format: "ANY dictionary.id == %@", id as CVarArg)
    var coreWords: [CoreWord]?
    if let result = try? managedContext.fetch(requestWords) as? [CoreWord] {
        let words = result.shuffled()
        for (index, value) in words.enumerated() {
            if value.value(forKey: "shuffle") != nil {
                value.setValue(index, forKey: "shuffle")
            }
        }
        coreWords = words
    }
    save()
    return coreWords
}

func getShuffleWords(id: UUID?) -> [CoreWord]? {
    guard let id = id else { return nil }
    let requestWords = NSFetchRequest<NSFetchRequestResult>(entityName: "CoreWord")
    let sort = NSSortDescriptor(key: "shuffle", ascending: true)
    requestWords.predicate = NSPredicate(format: "ANY dictionary.id == %@", id as CVarArg)
    requestWords.sortDescriptors = [sort]
    do {
        let result = try managedContext.fetch(requestWords)
        return result as? [CoreWord]
    } catch let error {
        fatalError(error.localizedDescription)
    }
}

graph

Но проблема в том, что если я перепутаю другой список, где это слово, то значение переписывается, и оно будет менять свою позицию везде. Как сохранить смешанный порядок в определенном списке c?

1 Ответ

1 голос
/ 24 марта 2020

В этой ситуации вам необходимо заменить отношения «многие-многие» промежуточной сущностью. Давайте назовем эту сущность листингом. Он будет представлять список определенного слова в определенной группе, поэтому каждый список должен иметь отношение «один к одному» с CoreWord и отношение «один к одному» с CoreGroup. В каждом случае обратное (которое вы могли бы назвать «списками») должно быть слишком большим. Сущность Listing должна иметь (как минимум) один атрибут shuffle, который представляет последовательность определенного слова в определенной группе.

Жизнь обычно усложняется, потому что вы должны создавать и управлять этими промежуточными объектами, а не чем просто работа с объектами Word и Group и их отношениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...