2013-12-08 141 views
0

我试图将数据从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; 
+0

使用'NSLog'在你的方法中打印'homeTeamText'和'vc'的值。 –

+0

标签是否正确连接到IB/Storyboard中的参考“HomeTeamLabel”? –

+0

你对segue id是否真的是“HomeTeam”'有多大信心? –

回答

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将解决该问题,确保只有在释放目标视图控制器时才会释放该问题。

+0

问题是我没有任何错误。没有发现问题! – user3033493

+0

@ user3033493我已经添加了一些答案。 – nhgrif

0

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

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

+0

标识符是HomeTeam,但风格是模式。这有什么区别吗? – user3033493

+0

编号样式没有区别。 – nhgrif