2017-11-14 17 views
0

Ich habe eine Tabellenansicht in meiner App integriert. Der Code ist wie folgtApp stürzt ab in viewForHeaderInSection:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return [sortedDates count]; 
} 

- (nullable UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 
    EventHeaderView *headerView = (EventHeaderView *)[tableView dequeueReusableHeaderFooterViewWithIdentifier:@"eventHeader"]; 
    if(headerView == nil) { 
     headerView = [[EventHeaderView alloc] initWithReuseIdentifier:@"eventHeader"]; 
    } 

    NSString *date = [sortedDates objectAtIndex:section]; **// app crashes here** 
    NSString *formatHeaderStr = [NSDate stringFromDate:[NSDate dateFromString:date withFormat:@"yyyy-MM-dd"] withFormat:@"EE, MMMM dd yyyy"]; 
    [headerView.dateLbl setText:formatHeaderStr]; 
    [headerView.addEventBtn setTag:(section+1)*100]; 
    [headerView.addEventBtn addTarget:self action:@selector(addEventBtnClicked:) forControlEvents:UIControlEventTouchUpInside]; 

    [headerView layoutSubviews]; 
    return headerView; 
} 

Die Anzahl der Abschnitte 'sortedDates' count zurück, aber immer noch viewForHeader stürzt auf [sortedDates objectAtIndex: Abschnitt]. Es passiert auch an anderen Stellen in meinem Code.

Ich verstehe nicht, wie Sie solche Probleme beheben. Es gibt eine sehr kleine Verzögerung bei diesen Methoden, die nacheinander aufgerufen werden, aber das Array scheint immer noch leer zu sein, wenn es die viewForHeader-Methoden erreicht.

Bitte helfen.

+0

Möglicherweise haben Ihre 'sortedDates' nicht den' index', aus dem Sie das 'date' auswählen möchten. – iPeter

+1

Post-Daten von sortedDates array ... –

+1

Zeigen Sie auch UITableView-Methoden wie 'numberOfRowsInSection' und ' cellForRowAtIndexPath' –

Antwort

1

Verwenden Sie dies, um den Wert von sortedDates zu erhalten.

NSString *date = [sortedDates objectAtIndex:section-1];

0

Wenn Sie mit objectAtIndex Methode stellen Sie sicher, dass Ihr Array hat, dass viele Objekte in it.So nur in Ihrem Fall

if (section >= 0 && section < [sortedArray count]) 
{ 
    NSString *date = [sortedDates objectAtIndex:section]; 
} 

Überprüfen Sie auch überprüfen, ob die sortedDate Objekt versehentlich nicht freigegeben wird, .