如何将 tableView:didSelectRowAtIndexPath 中选择的对象传递给压入堆栈的新 UIViewControllers?

How do you pass the object selected in tableView:didSelectRowAtIndexPath to new UIViewControllers pushed onto the stack?

我在 tableViewController 中显示项目列表,然后当 selected 将带有 .xib 文件的 viewController 推入堆栈时,给出更详细的解释带有几个 UIButton 的 textView 中的项目 select 以进行进一步操作。到目前为止,所有这些都有效。

我 运行 遇到的问题是将另一个 viewController 推入堆栈,其中包含来自 tableView 中 selected 的原始对象的信息的可编辑文本视图。我可以加载 viewController 和 .xib,但不能加载数据。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    JASDetailViewController *dvc = [[JASDetailViewController alloc]init];

    NSArray *ideas = [[JASIdeaStore sharedStore]allIdeas];

    JASIdea *selectedIdea = ideas[indexPath.row];

    dvc.idea = selectedIdea;

    [self.navigationController pushViewController:dvc animated:YES];
}

这完美地填充了 DetailViewController。然后,当移动到下一个 viewController:

- (IBAction)editButton:(id)sender
{

    JASEditViewController *evc = [[JASEditViewController alloc]init];

    //NSIndexPath *path = (NSIndexPath *)sender;

    //NSIndexPath *path = [[NSIndexPath alloc]init];

    //path = [NSIndexPath indexPathForItem:0 inSection:0];

    NSArray *ideas = [[JASIdeaStore sharedStore]allIdeas];

    JASIdea *selectedIdea = // Looking for a solution here. . .


    evc.idea = selectedIdea;

    [self.navigationController pushViewController:evc animated:YES];    
}

我可以加载 EditViewController,但不能加载数据。空白部分和注释掉的部分代表了我为让它发挥作用所做的一些尝试。通过指定一个特定的 indexPath,我可以让一个想法显示出来,但一直无法让我原来的 selection 从 tableView 中通过。

你不想要这个吗?

JASIdea *selectedIdea = self.idea;

如果我对您的代码的理解正确,您将从 JASDetailViewController 上的编辑按钮转到 JASEditViewController,但 JASIdea 实例保持不变。您将 selectedIdea 从 table 视图的 didSelectRowAtIndexPath 传递到 JASDetailViewController.idea。这意味着当您在 JASDetailViewController.editButton

中时,它就在 self.idea

由于您是从共享实例获取数据,因此无需将 selectedIdea 传递给 JASDetailViewController。相反,您应该创建一个 属性,我们称它为 selectedIndex,然后传递它。这样,您也可以将该值传递给 JASEditViewController。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    JASDetailViewController *dvc = [[JASDetailViewController alloc]init];
    dvc.selectedIndex = indexPath.row;
    [self.navigationController pushViewController:dvc animated:YES];
}

在 JASDetailViewController 的 viewDidLoad 中,您可以通过

获取选定的想法
JASIdea *selectedIdea = ideas[self.selectedIndex];