2017-02-20 71 views
0

我一直在这个错误上停留了一段时间。我有一个UITabBar与2个选项卡。第一个包含UITableViewController在一周的不同日期用餐。第二个标签包含带登录屏幕的UIViewControllerUITableView错误章节标题

UITableViewController被称为'EettafelView'。它从在线来源获得它的食物(使用Alamofire)并将它们呈现在应用程序中。它们缓存在CoreData中,并使用NSFetchedResultsController来检索它们。为此,我使用默认的UITableViewDelegates(numberOfRowsInSection,numberOfSections等) - 如果他们是相关的,我会发布他们在编辑。

当tableview加载时,我已经设置了fetchController并执行了一个fetch操作,我漂亮地打印了它的对象来测试它所持有的以及排序描述符是否完成了它们的工作。这导致以下情况:

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 
    } 
} 

这是我认为是通用的,因为它可以是。它可能是检索错误的章节标题的问题?

编辑: - 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! 
} 

编辑 - 格雷希特在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

请改变您的titleForHeaderInSection为: 返回fetchController?.sections [部分] .name 并告诉我你现在得到什么 –

+0

你用什么'sectio您的fetchedResultsController中的“nNameKeyPath”? –

回答

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(row:0,section:section))as?格雷希特{ 回报gerecht.dateString }其他{ 回零 } 否则它不会编译,但工作 – Emptyless

+0

其确定,我会更新我的答案。那么,它的工作? –

+0

是的,它的工作原理是,将其标记为答案。但是如何在fetchController部分没有被排序的时候仍然很奇怪。由于它按照正确的顺序包含正确的对象,但不知何故,这些部分的排列顺序不一样。 – Emptyless