Как добавить содержимое NSSet в [NSManagedObject]? - PullRequest
0 голосов
/ 31 августа 2018

Мой код

isFiltering = true
  let appDelegate = UIApplication.shared.delegate as! AppDelegate
  let context = appDelegate.persistentContainer.viewContext
  let words = textInSearchField.components(separatedBy: " ")

  for word in words{

    if (word).count == 0{
      continue
    }

    let firstNamePredicate = NSPredicate(format: "firstName contains[c] %@", word)
    let lastNamePredicate = NSPredicate(format: "lastName contains[c] %@", word)
    let idPredicate = NSPredicate(format: "id contains[c] %@", word)
    let orPredicate = NSCompoundPredicate(type: NSCompoundPredicate.LogicalType.or, subpredicates: [firstNamePredicate, lastNamePredicate, idPredicate])

    clientsEntity.predicate = orPredicate
    clientResults = try! context.fetch(clientsEntity) as! [NSManagedObject]

    let sort:NSSortDescriptor = NSSortDescriptor(key:"dateSorted", ascending: false)

    for (index, ob) in clientResults.enumerated(){

      let relationship = ob.value(forKey: "assessed_by") as! NSSet
      let array = relationship.sortedArray(using: [sort]) as! [NSManagedObject]


      for item in array.enumerated() {
        results.append(item.element)
        print(results)
      }
    }

Моя модель данных:

enter image description here

Я использую tableView для отображения моих данных, которые прекрасно работают, теперь я реализовал функцию фильтра, которая позволяет пользователю осуществлять поиск по имени, фамилии, идентификатору клиента и т. Д., Используя NSCompoundPredicate.

Затем я сортирую результирующий [NSManagedObject] по дате, используя NSSortDescriptor, моя цель - установить мою переменную clientResults для содержания SORTED содержимого NSSet. Мой оператор печати выводит только то, что в переменной результатов есть одна оценка, когда в действительности NSSet содержит два из этих объектов NSManagedObject.

let sort:NSSortDescriptor = NSSortDescriptor(key:"dateSorted", ascending: false)

    for (index, ob) in clientResults.enumerated(){

      let relationship = ob.value(forKey: "assessed_by") as! NSSet
      let array = relationship.sortedArray(using: [sort]) as! [NSManagedObject]

      // MARK - I enumerate the contents of the sorted array.

      for item in array.enumerated() {
        results.append(item.element)
        print(results)
      }
    }

Как лучше всего присваивать содержимое NSSet переменной типа [NSManagedObject]?

Спасибо.

1 Ответ

0 голосов
/ 31 августа 2018

Если вы знаете, что элементы в NSSet имеют тип NSManagedObject, почему бы просто не сделать

let managedObjectsArray = set.allObjects

или если вы хотите убедиться, что он имеет правильный тип, вы можете сделать:

if let managedObjectsArray = set.allObjects as? [NSManagedObject] {
    //do what you want with [NSManagedObject] array
}       
...