使用segue传递数据

时间:2013-12-08 15:27:53

标签: objective-c uistoryboardsegue

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

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;

2 个答案:

答案 0 :(得分:2)

你错过了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,让您知道这是否是正在执行的segue。

即使这实际上并没有导致问题(在本例中),你仍然应该这样做。我会在给出更多信息后更新这个答案。


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

假设故事板上的所有内容都正确无误,请务必在viewDidLoadviewWillAppear方法中添加以下内容:

HomeTeamLabel.text = HomeTeamString;

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

编辑:经过一些研究...... ,目标视图控制器中的HomeTeamString属性似乎必须是strong而不是weak。将其保留为weak可以在prepareForSegue方法结束后立即发布(在目标视图中,prepareForSegue结尾与viewDidLoad之间没有所有者)。将其更改为strong将解决问题,确保仅在目标视图控制器被释放时才会释放。

答案 1 :(得分:0)

请验证,您在故事板中设置了segue的标识符。enter image description here

在您的情况下,标识符为HomeTeam