【问题标题】:Passing data with segue使用 segue 传递数据
【发布时间】:2013-12-08 15:27:53
【问题描述】:

我试图将数据从 ViewController2 中的文本字段传递到 ViewController 中的标签。它似乎不起作用,我没有收到任何错误。我的 Segue 中缺少什么?

ViewController2.h

@interface ViewController2 : UIViewController {

IBOutlet UITextField *HomeTeam;

}

ViewController2.m

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    [segue.identifier isEqualToString:@"HomeTeam"];
        NSString *homeTeamText = HomeTeam.text; 
        ViewController *vc = [segue destinationViewController];
        vc.HomeTeamString = homeTeamText;
}

ViewController.h

@property (weak, nonatomic) IBOutlet UILabel *HomeTeamLabel;
@property (weak, nonatomic) NSString *HomeTeamString;

ViewController.m

@synthesize HomeTeamString, HomeTeamLabel;

【问题讨论】:

  • 在你的方法中使用NSLog打印homeTeamTextvc的值。
  • 标签是否正确连接到 IB/Storyboard 中的引用 HomeTeamLabel
  • 你对 segue id 真的是 "HomeTeam" 有多大把握?
  • 你有写segue的名字吗?您的代码可能会与大量的“HomeTeam”以及“HomeTeam”显然既用作 TextField 名称又用作 Segue Identifier 的事实混淆。
  • 可能是因为NSString 属性很弱,在segue 之后会立即释放。尝试将其设置为strong。通常,如果您在头文件中创建任何属性,则应始终将属性设置为强。

标签: objective-c uistoryboardsegue


【解决方案1】:

您缺少if。除非你复制粘贴错了……

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if([segue.identifier isEqualToString:@"HomeTeam"]) {
        NSString *homeTeamText = HomeTeam.text; 
        ViewController *vc = [segue destinationViewController];
        vc.HomeTeamString = homeTeamText;
    }
}

[segue.identifier isEqualToString:@"HomeTeam"] 返回一个BOOL,让您知道这是否是正在执行的转场。

即使这实际上并没有导致问题(在此示例中),您也应该这样做。随着更多信息的提供,我会更新这个答案。


另外,请注意,在此特定代码中,您正在目标视图控制器上设置 NSString 属性。不是标签...

假设故事板上的所有内容都是正确的,请务必将以下内容添加到您的 viewDidLoadviewWillAppear 方法中:

HomeTeamLabel.text = HomeTeamString;

为了更好地衡量,您可能需要将 HomeTeamStringweak 更改为 strong

编辑:经过一番研究...看来,您的目标视图控制器中的 HomeTeamString 属性必须是 strong 而不是 weak。将其保留为weak 允许在prepareForSegue 方法结束后立即释放它(它在目标视图开始时的prepareForSegue 结束和viewDidLoad 之间没有所有者)。将其更改为strong 将解决问题,确保它仅在目标视图控制器被释放时才会被释放。

【讨论】:

  • @user3033493 我在答案中添加了一些内容。
【解决方案2】:

请确认,您在 storyboard 中设置了 segue 的标识符。

在您的情况下,标识符将是 HomeTeam

【讨论】:

  • 标识符是 HomeTeam,但样式是模态的。这有什么不同吗?
  • 没有。风格没有区别。
猜你喜欢
  • 2016-05-20
  • 2015-05-24
  • 1970-01-01
  • 2015-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
相关资源
最近更新 更多