ビュー間でデータを渡す方法を理解するための簡単なアプリケーションを作成しようとしています。私には 2 つの見方があります。最初のビューは、次のメソッドを使用していくつかの文字列を 2 番目のビューに渡します。
- (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];
}
そして、2 番目のビューはこのメソッドでデータを受け取ります。
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
if (self.firstColor != nil && ![self.firstColor isEqualToString:@""]) {
self.favoriteColorLabel.text = [[NSString alloc] initWithFormat:@"Favorite color: %@", self.firstColor];
}
if (self.secondColor != nil && ![self.secondColor isEqualToString:@""]){
self.secondFavoriteColorLabel.text = [[NSString alloc] initWithFormat:@"Second favorite color: %@", self.secondColor];
}
}
2 番目のビューは最初の文字列を視覚化します (ただし、2 番目のビューはまだ空であるため、視覚化されません)。次に、2 番目のビューは委譲によって最初のビューに文字列を返します。
- (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];
}
}
ここですべてが機能し、最初のビューは両方の文字列を視覚化します。しかし今、私は問題を抱えています。文字列を 2 番目のビューに再度渡そうとすると、最初のビューのみが正しく渡されます。委譲によって値が設定された後でも、2 番目のビューは常に nil 値を持つ secondColor を受け取ります。変数 firstColor および secondColor は、まったく同じ方法で宣言および合成されます。エラーを見つけるのを手伝ってもらえますか?