I'm using a UITableViewController
for a table in my app, and I've added an NSFetchedResultsController
to provide the data to show in the table (setting self
as it's delegate).
However I would like to add a unique cell as the last cell of the table, unrelated to the items produced by the NSFetchedResultsController
's predicate, I want this cell to always be at the bottom of the table.
I've tried simply added 1 to these methods in the table view data source:
- (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;
}
And then catching the case where this extra row is being generated like so (the table only has 1 section):
- (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.
}
This checks to see if the index is the last cell and deals with it appropriately.
However I am still getting the following error at runtime:
*** Terminating app due to uncaught exception 'NSRangeException',
reason: '*** -[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0]'
Any idea what's causing this? Or is there a better way of adding an extra row to a table view controlled by an NSFetchedResultsController?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…