Я использую базовые данные для управления вещами, а затем UITableViewController / UITableViewCell для представления списка вещей. Однако объект Thing имеет больше данных, чем просто то, что я отображаю в текстовом свойстве UITableViewCell, и когда я перехожу от UITableViewController к более подробному контроллеру представления Thing, мне действительно нужен указатель на объект Thing, поэтому я может передать его следующему контроллеру представления.
Например:
-(UITableViewCell*)tableView:(UITAbleView*)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
ENTRY_LOG;
// Ask the NSFetchedResultsController for the NSManagedUserObject at the row in question
Thing* thing = [self.fetchedResultsController objectAtIndexPath:indexPath];
// For brevity skip dequeueReusable...
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.textLabel.text = thing.name;
EXIT_LOG;
return cell;
Теперь предположим, что я предполагаю, что переход подключен соответствующим образом:
- (void)prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender {
ENTRY_LOG;
UITableViewCell* cellSender = (UITableViewCell*)sender;
// I want to do this:
Thing* thingHandle = [cellSender someMessageToGetThingReference];
[segue.destinationViewController setThing:thing];
// and I don't want to do this
// setup NSFetchRequest and predicate to get thing where 'name = cellSender.text'
[segue.destinationViewController setThing:thing];
EXIT_LOG;
}
Если бы я мог получить indexPath, в котором находится ячейка, я мог бы затем использовать свой NSFetchResultsController, чтобы хотя бы снова получить objectAtIndexPath, возможно, вызвать - (NSIndexPath *) indexPathForSelectedRow в prepareForSegue для UITableView и продолжить оттуда.