UITableView: Obsługa wyboru komórek w tabeli mieszanych komórek, wyświetlanie komórek statycznych i dynamicznych

Próbuję łączyć dynamiczne i statyczne komórki w zgrupowanym widoku tabeli: chciałbym je uzyskaćdwie sekcje z komórkami statycznymi na górze, a następniesekcja komórek dynamicznych (patrz zrzut ekranu poniżej). Ustawiłem zawartość widoku tabeli nakomórki statyczne.

Edytować

Na podstawie rady AppleFreak zmieniłem kod w następujący sposób:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell;
    if (indexPath.section <= 1) { // section <= 1 indicates static cells
        cell = [super tableView:tableView cellForRowAtIndexPath:indexPath]; 
    } else { // section > 1 indicates dynamic cells
        CellIdentifier = [NSString stringWithFormat:@"section%idynamic",indexPath.section];
        cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    }
return cell;

}

Jednak moja aplikacja ulega awarii z komunikatem o błędzie

Zakończenie aplikacji z powodu nie przechwyconego wyjątku „NSInternalInconsistencyException”, powód: „UITableView dataSource musi zwrócić komórkę z tableView: cellForRowAtIndexPath:”

dla sekcji 0 i wiersza 0. Komórka zwrócona zcell = [super tableView:tableView cellForRowAtIndexPath:indexPath] dla sekcji 0 i wiersza 0 jestnil.

Co jest nie tak z moim kodem? Czy mogą być jakieś problemy z moimi punktami sprzedaży? Nie ustawiłem żadnych punktów sprzedaży, ponieważ subklasujęUITableViewController i podobno nie ma żadnych gniazd do ustawienia widoku tabeli (?). Jakieś sugestie, jak to zrobić lepiej?

Edytuj II

Odtworzyłem moją scenę w serii ujęć (zapoznaj się z moim zaktualizowanym zrzutem ekranu powyżej) i przepisałem kontroler widoku, aby rozpocząć od nowej bazy. Przeczytałem również opis na forum Apple, jak zasugerował applefreak. Jednak uruchamiam swój pierwszy problem z tą metodąnumberOfSectionsInTableView:tableView, w którym zwiększam liczbę sekcji statycznych (dwie) o jeden.

  - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return [super numberOfSectionsInTableView:tableView] + 1 ; }

Aplikacja uległa awarii z komunikatem o błędzie:

Aplikacja kończąca z powodu nie przechwyconego wyjątku „NSRangeException”, powód: „*** - [__ NSArrayI objectAtIndex:]: indeks 2 poza granicami [0 .. 1]”

Dlaczego ten kod nie działa dla mnie, mimo że przestrzegałem zaleceń Apple i Applefreak? Możliwe, że tableView zmienił się nieco w iOS 6?

Rozwiązanie: Udało mi się to teraz uruchomić za pomocą przykładowego kodu AppleFreaks w jego odpowiedzi poniżej. Dziękuję, AppleFreak!

Edytuj III: Wybór komórki:

Jak mogę sobie poradzićwybór komórek w mieszanym (komórki dynamiczne i statyczne) widoku tabeli komórek? Kiedy zadzwonię?super i kiedy zadzwonięself tableView? Kiedy używam

[[super tableView] selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]

i spróbuj sprawdzić wybrane ścieżki indeksu za pomocą:

UITableView *tableView = [super tableView];
if ( [[tableView indexPathForSelectedRow] isEqual:customGrowthIndexPath] ) { .. }

Dostaję zwrotną wartośćnil.

Ponieważ nie mogę znaleźć źródła mojego błędu, naprawdę byłbym wdzięczny za pomoc

questionAnswers(6)

yourAnswerToTheQuestion