2017-02-20 3 views
0

Я уже давно застрял в этой ошибке. У меня есть UITabBar с 2 вкладками. Первый содержит UITableViewController с едой в разные даты недели. Вторая вкладка содержит UIViewController с экраном входа.UITableView неправильные названия разделов

UITableViewController называется «EettafelView». Он получает питание (используя Alamofire) из онлайн-источника и представляет их в приложении. Они кэшируются в CoreData и извлекаются с помощью NSFetchedResultsController для их представления. Для этого я использую по умолчанию UITableViewDelegates (numberOfRowsInSection, numberOfSections и т. Д.). Если они важны, я опубликую их в редактировании.

Когда табличное представление загружается, и я установил fetchController и выполнил выборку, я довольно-напечатаю ее объекты, чтобы проверить, что он держит, и если дескрипторы сортировки выполнили свою работу. Это приводит к следующему:

Hollandse stoof met bokbier - Optional("maandag, 20 feb.") 
    Gehaktballetjes 
    Quorn gehakt 
Stamppot van verse spinazie - Optional("dinsdag, 21 feb.") 
    Rookworst 
    Kaasspies 
Indiase Curry - Optional("woensdag, 22 feb.") 
    Kip 
    Bloemkool 
Pasta Mexicane - Optional("donderdag, 23 feb.") 
    Gehakt 
    Tofu en Bruine Bonen 
Boeuf des Gardiens - Optional("vrijdag, 24 feb.") 
    Rundvlees 
    Kastanjechampignons 

С кодом довольно-печати:

if let objects = fetchController?.fetchedObjects as? [Gerecht] { 
    for object in objects { 
     print("\(object.basis ?? "") - \(object.dateString)") 
     print("\t\(object.vlees ?? "")") 
     print("\t\(object.vega ?? "")") 
    } 
} 

Это именно то, как это должно быть. Таким образом, FetchController содержит правильные объекты и правильно их сортирует. Вид, однако выглядит это нравится:

EettafelView

Названия разделов являются неправильными. Код для получения названия разделов выглядит следующим образом:

override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
    if let sections = fetchController?.sections, sections.count > 0 { 
     return sections[section].name 
    } else { 
     return nil 
    } 
} 

Что, я думаю, как родовое, как это может быть. В чем может быть проблема с получением неправильных заголовков разделов?

EDIT: - CellForRow Метод

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "Eettafel") as? Eettafel_Cell 
    let gerecht = fetchController?.object(at: indexPath) as? Gerecht 
    if let gerecht = gerecht { 
     cell?.gerecht = gerecht 
    } 

    return cell! 
} 

EDIT - Герехт в cellForRow

печать описание NSManagedObject (точки останова в случае пусть Герехт) дает:

Printing description of gerecht.some: 
<Almanapp.Gerecht: 0x1740b77c0> (entity: Gerecht; id: 0xd0000000000c0000 <x-coredata://A6B5411D-DF77-43DE-8084-86C76C42F68A/Gerecht/p3> ; data: { 
    basis = "Hollandse stoof met bokbier"; 
    date = "2017-02-20 00:23:07 +0000"; 
    dateString = "maandag, 20 feb."; 
    status = nil; 
    vega = "Quorn gehakt"; 
    vlees = Gehaktballetjes; 
}) 

Что верный.

+0

Hollandse Stoof встретились bokbier должны быть на понедельник (maandag) (как на выход консоли) но на скриншоте на вторник (dinsdag) – Emptyless

+0

Пожалуйста, измените названиеForHeaderInSection для: return fetchController? .sections [section] .name И скажите мне, что вы получаете сейчас –

+0

, что вы используете для своей 'sectio nNameKeyPath' в вашем fetchedResultsController? –

ответ

1

Попробуйте заменить функцию titleForHeaderInSection для этого.

override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
    if let gerecht = fetchController?.object(at: IndexPath(row: 0, section: section)) as? Gerecht { 
     return gerecht.dateString 
    }else{ 
     return nil 
    } 
} 

Я думаю, что проблема вы используете:

if let sections = fetchController?.sections, sections.count > 0 { 
     return sections[section].name 

Проверьте, и скажите мне, пожалуйста,

+0

Изменено: if let gerecht = fetchController? .object (at: IndexPath (строка: 0, section: section)) как? Герехт { возвращение gerecht.dateString } еще { возврат ноль } Else не будет компилировать, но это работает – Emptyless

+0

Его хорошо, я буду обновлять мой ответ. Так, это работает? –

+0

Да, это работает, плохо отметим это как ответ. Но по-прежнему странно, что разделы fetchController не упорядочены. Так как он содержит правильные объекты в правильном порядке, но так или иначе разделы не упорядочены одинаково. – Emptyless

Смежные вопросы