Uložil som objekty do základných údajov a hľadám spôsob, ako načítať tieto objekty ako Slovník
Tu je príklad môjho kódu, kde oddiely sú kľúče pre slovník a spoločnosť ako pole základných dátových objektov.
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)")
}}
Pri pokuse o spustenie kódu sa vyskytla chyba:
fatálna chyba: neočakávane sa zistilo nulo pri rozbalení voliteľnej hodnoty
Mohol by mi niekto pomôcť s týmto problémom?
odpovede:
1 pre odpoveď č. 1Toto chybové hlásenie znamená, že vynútite vybalenie voliteľnej položky, ktorá nemá hodnotu. Inými slovami, ktoré používate !
kde by ste nemali „t.!
).)
Pozrime sa na riadok, kde to urobíte:
companies[sections[index]]!.append(object)
Ak to rozdelíme a pridáme odvodené typy, máme:
let section: String? = sections[index]
let companyArray: Array<Company> = companies[section]!
Zrážate sa, pretože companies
začína prázdny, preto sa požiadavka na akékoľvek pole vráti nil
, (V skutočnosti si nie som istý, ako sa váš kód kompiluje, pretože do slovníka sa nemôžete prihlásiť pomocou voliteľného doplnku.)
Ak to však vyriešite, stále máme problém, pretože na vyhľadanie tejto sekcie používate index stiahnutého poľa. Ak máte viac ako tri spoločnosti, začne to zlyhávať.
Mám podozrenie, že chcete niečo ako:
for let company in result {
if var companyArray = companies[company.status] {
companyArray.append(company)
} else {
companies[company.status] = [company]
}
}
Kde status
je vynájdená nehnuteľnosť dňa Company
ktorý vráti a String
ako „Čaká sa“ alebo „Aktívne“.
0 pre odpoveď č. 2
Našiel som riešenie, stačí použiť NSFetchResultController, aby sa údaje v TableView zobrazovali v rôznych sekciách.