我试图创建一个简单的应用程序,以了解如何在视图之间传递数据。我有两个意见。第一个使用此方法将一些字符串传递到第二个视图:iPhone:在视图之间传递数据
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"colorSegue"]) {
[segue.destinationViewController setFirstColor:self.favoriteColorTextField.text];
[segue.destinationViewController setSecondColor:self.secondColor];
[segue.destinationViewController setDelegate:self];
}
而第二个视图使用此方法接收数据。直到现在一切正常,第二个视图可视化第一个字符串(但不是第二个,因为它仍然是空的)。然后第二视图传回一个字符串,第一个到代表团:
- (void)viewWillDisappear:(BOOL)animated
{
[self.delegate setSecondFavoriteColor:self.secondFavoriteColorTextField.text];
}
而且第一视图显示的字符串是这样的:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
if (self.secondColor != nil && ![self.secondColor isEqualToString:@""]) {
self.secondFavoriteColorLabel.text = [[NSString alloc] initWithFormat:@"Second favorite color: %@", self.secondColor];
}
}
这里一切正常,第一视图显示两个字符串。 但现在我有一个问题。如果我尝试再次传递字符串到第二个视图,只有第一个正确传递。第二个视图总是通过nil值接收secondColor,即使其值已通过委派设置。 变量firstColor和secondColor被完全以相同的方式声明和合成。你能帮我找到错误吗?
什么方法 - (无效)setSecondFavoriteColor:在所述第一视图(的NSString *)色彩控制器看起来像? – jmstone617
你是如何定义'secondColor'属性的。 self.secondColor在视图中的日志会出现,并setSecondFavoriteColor? –
setSecondFavoriteColor方法:(NSString *)secondFavoriteColor只是简单的“self.secondColor = secondFavoriteColor;”。 secondColor属性在头文件中声明为“@property(weak,nonatomic)NSString * secondColor;”。我记录secondColor,并在第一个视图控制器它包含正确的字符串都在viewWillAppear和setSecondFavoriteColor,但在viewWillAppear里面的第二个视图控制器总是等于(空)。 – Soel