无法在表视图和另一个视图控制器之间传递数据

Posted

技术标签:

【中文标题】无法在表视图和另一个视图控制器之间传递数据【英文标题】:Unable to pass data between a table view and another view controller 【发布时间】:2015-10-01 20:13:10 【问题描述】:

我在表格视图控制器和另一个视图控制器之间传输数据时遇到问题。 在我的发送控制器上 - tableviewcontroller.m - 我在prepareForSegue: 下有这个

FriendDetailViewController *fvc = (FriendDetailViewController *)segue.destinationViewController;
NSIndexPath *path = [self.tableView indexPathForSelectedRow];
PFUser *u = self.friends[path.row];
fvc.nameLabel.text = u.username;


//friendViewController.m (the destination view controller)
- (void)viewWillLoad  
    [super viewDidLoad];
    if (self.user) 
        self.nameLabel.text = self.user.username;
    else
        self.nameLabel.text = @"No data to display";
    

标签显示“没有要显示的数据”。

我已经阅读了其他帖子并查看了教程,但我无法弄清楚。

【问题讨论】:

【参考方案1】:

您只是在 prepareForSegue 中设置 nameLabel,而不是实际用户,因此当您的新 VC 加载时它是未实例化的。

尝试将此添加到您的prepareForSegue

fvc.user = u;

假设您要传递的用户存储在 u 中,应该这样做(同时假设 user 是新视图控制器的公共属性。)

【讨论】:

非常感谢比尔!这行得通。那么它的作用是将选定的用户传递给目标视图控制器吗? 正确。所以你所做的只是设置名称标签的文本,使用self.nameLabel.text = u.username 行。通过访问 nameLabel 文本的值,您真正可以访问的有关用户的所有信息都是用户名,但是您实际上从未将整个用户对象交给新的 VC,因此对于新的 VC,它还不存在。希望这个解释是有道理的! 是的,它确实有道理,有助于澄清为什么我无法在下一个 VC 中获取用户对象。相同的实现是否适用于方法 didSelectRowAtIndexPath? 是的,如果你在代码中做所有事情,didSelectRowAtIndexPath: 将是你设置下一个视图控制器的地方。 嘿比尔,我向didSelectRowAtIndexPath 添加了相同的代码,但对象没有被发送到friendDetailViewController。我记录了它并获得了(null)【参考方案2】:

您可以在 FriendDetailViewController 的 .h 文件中放置一个属性,并在调用之前设置它:

fvc.attribute = u.username;

在此之后,您可以在 didSelectRowAtIndexPath 中为“fvc”调用 pushViewController

【讨论】:

在 FriendDetailViewController 的 .h 文件中,我有 self.nameLabel.text = self.user.userName; 我不需要使用 pushViewController,因为我已将 segue 连接到原型单元。我添加了 pushViewController,它把我送到了一个空白的黑屏。我的 didSelectRowAtIndexPath 中的代码几乎与 prepareForSegue 相同,但我在尝试将对象发送到下一个 VC 时遇到了同样的问题。 @GabrielaNogueira【参考方案3】:

您不能在 prepareForSegue 上设置 UI 操作。

您可以改为在目标 viewcontroller 上定义 user 变量。

之后,在prepareForSegue 上,您可以将选定的PFUser 设置为目标viewcontroller's user

如果您想显示用户名,请使用viewWillAppear 而不是viewWillLoad

如果你看不懂,请告诉我,我可以为大家展示详细的代码。

【讨论】:

我可以看到你的目标,但正如@MoLow 所说,添加代码肯定会澄清你的答案。

以上是关于无法在表视图和另一个视图控制器之间传递数据的主要内容,如果未能解决你的问题,请参考以下文章

在视图控制器之间传递数据无法正常工作

从表视图到另一个表视图之间传递数据(多)[重复]

prepareForSegue 是在视图控制器之间传递值的正确方法吗

快速在标签查看的控制器之间传递数据?

使用存储在核心数据中的数据将数据从表视图控制器传递到视图控制器

试图在两个视图控制器之间传递数据