【问题标题】:Passing Data Between在之间传递数据
【发布时间】:2014-01-20 15:32:04
【问题描述】:

我有两个通过 segue 连接的 ViewController,第一个是 Sub View,第二个是 Sub Tabela 我想将该表中选定行的值从我的第一个视图控制器传递到我的第二个视图控制器,以便我可以定义他的标题。 这是代码。

SubView.m(我的第一个 ViewController)

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // _vinhoArray is the array that I populate the TableView
    NSString *selectedRow = [_vinhoArray objectAtIndex:indexPath.row];
    // Sub Tabela is the name of Second View
    SubTabela *subTabela = [[SubTabela alloc] init];
    // tituloTabela is a NSString in my Second View
    subTabela.tituloTabela = linhaSelecionada;

    // Here i get the Right value
    NSLog(@"value %@", subTabela.tituloTabela);

}

SubTabela.h(我的第二个 ViewController)

@property (nonatomic, strong) NSString *tituloTabela;

SubTabela.m

@synthesize tituloTabela;

- (void)viewDidLoad
{

    [super viewDidLoad];

    self.title = tituloTabela;

    // Here i get the a Null value
    NSLog(@"value %@", tituloTabela);

}

请帮忙!

【问题讨论】:

  • 打开屏幕的代码在哪里?它非常重要,因为我认为我看到了您的错误
  • 屏幕正在打开。对不起,如果我不明白,我是开发中的新手。
  • 是的,我没有你使用 segue,但你还没有将调用 segue 的代码添加到你的问题中
  • @SimonMcLoughlin 那么我何时以及如何调用此方法?

标签: ios objective-c didselectrowatindexpath


【解决方案1】:

我认为您没有正确传递数据,看起来好像您正在 didSelectRowAtIndexPath 内创建一个对象并将数据传递给该对象,然后丢弃该对象。你需要做的是这样称呼:

[self performSegueWithIdentifier:<#(NSString *)#> sender:self];

改变屏幕然后像这样传递数据是prepareForSegue回调

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    SubTabela *vc = (SubTabela *)segue.destinationViewController;
    vc.tituloTabela = linhaSelecionada;
}

【讨论】:

  • 但是我没有在 didSelectRowAtIndexPath 中传递值?我如何无法从所选行中获取值?
  • @DiegoRodrigues 但是您没有在didSelectRowAtIndexPath 中传递数据,您创建了一个名为subTabela 的变量,您设置了数据然后您不再使用该对象,因此它不会在任何地方使用.然后,当您调用 segue 时,它​​会再次创建该 viewController 而没有您在第一个上设置的数据。您需要在didSelectRowAtIndexPath 方法之外创建一个变量,在didSelectRowAtIndexPath 回调中调用segue 并按照我显示的方式传递数据。
  • @DiegoRodrigues 仅仅因为您创建了subTabela 并不意味着您对它所做的任何事情都会影响您应用中的所有subTabela。您可以拥有许多相同的类并使用上述方法将不同的值传递给它们
  • 如果在didSelectRowAtIndexPath 中调用[self performSegueWithIdentifier:&lt;#(NSString *)#&gt; sender:self]; 方法,我会收到此错误,并且我的导航栏已损坏。 2014-01-20 15:33:36.885 Prototipo[2001:70b] 嵌套推送动画可能导致导航栏损坏 2014-01-20 15:33:37.247 Prototipo[2001:70b] 完成导航转换一个意想不到的状态。导航栏子视图树可能已损坏。
  • @DiegoRodrigues 错误是说您尝试多次推送。您是否在另一个电话中离开以触发转场?这就是为什么我两次要求您编辑您的问题并显示您的代码的那部分!拨打任何其他电话以推动 segue,应该没问题
猜你喜欢
  • 2014-05-22
  • 2011-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-27
  • 1970-01-01
  • 2016-11-21
  • 2019-11-01
相关资源
最近更新 更多