/ / Jak pobrać podstawowe obiekty danych do Dictionary w Swift? - szybki, xcode, słownik, podstawowe dane

Jak pobrać podstawowe obiekty danych do Dictionary w Swift? - szybkie, xcode, słownik, dane podstawowe

Zapisałem obiekty w podstawowych danych i szukam, jak pobrać te obiekty jako słownik

Oto przykład mojego kodu, w którym sekcje są kluczami do słownika, a firma jako tablica podstawowych obiektów danych.

private var companies = Dictionary<String, Array<Company>>()
private var sections: [String] = ["Pending", "Active", "Pending"]

override func viewWillAppear(_ animated: Bool) {
let fetchRequest : NSFetchRequest<Company> = Company.fetchRequest()
let moc = DatabaseController.getContext()
do {
let request = try moc.fetch(fetchRequest)
for case let (index, object) in request.enumerated() {
companies[sections[index]]!.append(object)
}
} catch let error as NSError {
print("Could not fetch. (error), (error.userInfo)")
}}

Podczas próby wykonania kodu pojawia się błąd:

wprowadź opis obrazu tutaj

błąd krytyczny: nieoczekiwanie znaleziono zero podczas rozpakowywania wartości opcjonalnej

Czy ktoś mógłby mi pomóc z tym problemem?

Odpowiedzi:

1 dla odpowiedzi № 1

Ten komunikat o błędzie oznacza, że ​​„wymusza się rozpakowanie opcji, która nie ma wartości. Innymi słowy, którego używasz ! gdzie nie powinieneś "t. (Zasadniczo nigdy nie powinieneś używać operatora wymuszającego odwijanie (!).)

Spójrzmy na linię, w której to robisz:

companies[sections[index]]!.append(object)

Jeśli rozwiążemy to i dodamy wywnioskowane typy, mamy:

let section: String? = sections[index]
let companyArray: Array<Company> = companies[section]!

Rozbijasz się, ponieważ companies zaczyna się pusty, więc prośba o dowolną tablicę wróci nil. (W rzeczywistości nie jestem pewien, jak kompiluje się twój kod, ponieważ nie możesz zapisać się do słownika za pomocą opcjonalnego).

Jeśli jednak to naprawisz, nadal będziemy mieć problem, ponieważ „używasz indeksu pobranej tablicy do wyszukiwania sekcji. Jeśli masz więcej niż trzy firmy, to zacznie się nie udać.

Podejrzewam, że chcesz czegoś takiego:

for let company in result {
if var companyArray = companies[company.status] {
companyArray.append(company)
} else {
companies[company.status] = [company]
}
}

Gdzie status jest wynalezioną własnością na Company która zwraca a String np. „Oczekuje” lub „Aktywny”.


0 dla odpowiedzi nr 2

Znalazłem rozwiązanie, wystarczy użyć NSFetchResultController, aby wyświetlić dane w TableView według różnych sekcji.