私の最初の質問をスタックオーバーフローに投稿してください! 私の質問が明確であることを願っています、ここにあります...
テーブルビューを持つ最初のビューコントローラーにナビゲーションコントローラーが埋め込まれています。テーブル ビューから、First Detail Controller にプッシュするセグエがあります。すべてが正常に機能し、セグエはデータを最初の詳細コントローラーに渡しますが、ボタンから2番目の詳細コントローラーに再度プッシュしたいと思います。
絵コンテ内のレイアウトはこんな感じ 絵コンテの画像
セカンド ディテール コントローラーをセットアップし、ファースト ディテール コントローラーのボタンから押しました。ただし、配列にあるデータを Second Detail Controller に渡す方法がわかりません。何が渡されたかを確認するために NSLog 行を追加しましたが、デバッグ パネルは " (null) "を出力しています。
これは、ColorBookViewController という名前の .m First View Controller からの私の viewdidload と segue コードです。
- (void)viewDidLoad
{
[super viewDidLoad];
Color *color1 = [Color new];
color1.name = @"Red";
color1.hexnumber = @"FF0000";
color1.spanishname =@"Rojo";
Color *color2 = [Color new];
color2.name = @"Green";
color2.hexnumber = @"00FF00";
color2.spanishname =@"Verde";
Color *color3 = [Color new];
color3.name = @"Blue";
color3.hexnumber = @"0000FF";
color3.spanishname = @"Azul";
colors = [NSArray arrayWithObjects: color1,color2,color3, nil];
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"showColorDetail"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
ColorDetailViewController *destViewController = segue.destinationViewController;
destViewController.color = [colors objectAtIndex:indexPath.row];
}
}
以下は、ColorDetailController という名前の最初の詳細コントローラーの .m から読み込まれたビューです。
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"This is...%@", color.name);
self.nameLabel.text = color.name;
self.hexnumberLabel.text = color.hexnumber;
}
SecondDetailController の私の .h:
#import <UIKit/UIKit.h>
#import "Color.h"
@interface SecondDetailViewController : UIViewController
@property (nonatomic,weak) IBOutlet UILabel *spanishnameLabel;
@property (nonatomic, strong) Color *color;
@end
以下は、SecondDetailController という名前の Second Detail Controller の .m から読み込まれたビューです。
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = color.name;
NSLog(@"This is...%@", color.spanishname);
self.spanishnameLabel.text = color.spanishname;
}
アプリはシミュレーターで正常に動作しますが、Second Detail Controller の空白の画面が表示され、NSLog(@"This is...%@", color.spanishname); から "null" の結果が得られます。
セグエが最初の詳細ビューのインスタンスを渡して保持するが、2 番目の詳細ビューを保持しない理由について何か提案はありますか? それとも、ここでもっと基本的な何かが欠けていますか? First Detail Controller で 2 番目のセグエを設定しようとしたところ、NSLog は正しい結果 (スペイン語の色名) を生成しましたが、これを Second Detail Controller に渡す方法がわかりません。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"showMoreDetail"]) {
NSLog(@"This is... %@",color.spanishname); //works fine
self.spanishnameLabel.text = color.spanishname; //throws error
}
}
助けや洞察をありがとう!