Chcę uzyskać wyraźne daty z podstawowych danych. Dzięki temu kodzie fetchrequest.Returnsdistinctresults = true nie działa. Nadal pokazuje wszystkie wartości.

guard let appDelegate =
          UIApplication.shared.delegate as? AppDelegate else {
            return
        }
    
    let managedContext = appDelegate.persistentContainer.viewContext
    let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Journal")
    
    
    fetchRequest.propertiesToFetch = ["dateAsNumber"]
    fetchRequest.returnsDistinctResults = true

    do {
    
        dateListSquare = try managedContext.fetch(fetchRequest)
        
    } catch let error as NSError {
      
        print("Could not fetch. \(error), \(error.userInfo)")
    }
0
Nithin.P Molethu 7 październik 2020, 10:15

1 odpowiedź

Najlepsza odpowiedź

Jeśli chcesz odmiennych wyników, musisz ustawić typ wyniku żądania pobierania na NSFetchRequestResultType.dictionaryResultType. Nie można pobrać zarządzanych obiektów i uzyskać wyraźne wyniki, ponieważ może wystąpić więcej niż jeden obiekt zarządzany o tej samej wartości.

To wyglądałoby coś takiego

let fetchRequest: NSFetchRequest<NSDictionary> = NSFetchRequest(entityName: "Journal")
fetchRequest.propertiesToFetch = ["dateAsNumber"]
fetchRequest.returnsDistinctResults = true
fetchRequest.resultType = .dictionaryResultType

Wynik będzie tablicą słowników. Każdy będzie miał jeden klucz na wpis w {x0}} (tylko w tym przypadku).

Jeśli użyjesz propertiesToFetch bez dictionaryResultType, wpływa na to, jak działa błąd, ale nie zawartość wyniku. Używanie returnsDistinctResults działa tylko wtedy, gdy używasz również propertiesToFetch, więc jest również dotknięty, czy używasz dictionaryResultType.

0
Tom Harrington 7 październik 2020, 21:44