Używam UITableViewController
dla tabeli w mojej aplikacji i dodałem NSFetchedResultsController
, aby podać dane do wyświetlenia w tabeli (ustawienie self
jako delegata).Dodaj dodatkowy wiersz do UITableView zarządzanego przez NSFetchedResultsController
Jednak chciałbym dodać unikalną komórkę jako ostatnią komórkę tabeli, niezwiązaną z przedmiotami wyprodukowanymi przez predykat NSFetchedResultsController
, chcę, aby ta komórka zawsze znajdowała się na dole tabeli.
Próbowałem po prostu dodaje 1 do tych metod w źródle danych widoku tabeli:
- (NSUInteger)numberOfSectionsInTableView:(UITableView *)sender
{
return [[self.fetchedResultsController sections] count] + 1;
}
- (NSUInteger)tableView:(UITableView *)sender numberOfRowsInSection:(NSUInteger)section
{
return [[[self.fetchedResultsController sections] objectAtIndex:section] numberOfObjects] + 1;
}
A potem łapanie przypadek, w którym ten dodatkowy rząd jest generowany jak tak (tabela ma tylko 1 punkt) :
- (UITableViewCell *)tableView:(UITableView *)sender
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row == [self.fetchedResultsController.fetchedObjects count]) {
//Generate the last cell in table.
} else {
//Generate the rest of the cells like normal.
}
return nil; //To keep the compiler happy.
}
Spowoduje to sprawdzenie, czy indeks jest ostatnią komórką i czy zajmuje się nią prawidłowo.
Jednak ja wciąż otrzymuję następujący błąd w czasie wykonywania:
*** Terminating app due to uncaught exception 'NSRangeException',
reason: '*** -[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0]'
Każdy pomysł co jest przyczyną tego? Czy istnieje lepszy sposób dodawania dodatkowego wiersza do widoku tabeli kontrolowane przez NSFetchedResultsController?
Ach tak, to byłby o wiele lepszy sposób realizacji tego, dziękuję. (Najwyraźniej wciąż jestem nowicjuszem w programowaniu na iOS :-)) –
Tak, to było bardzo hackowe. Ten pomysł jest tak prosty, jak wspaniały ...Wielkie dzięki! – Shingoo
ale wygląda to tak - http://stackoverflow.com/questions/10965098/nsfetchedresultscontroller-prepend-a-row-or-section –