0

私のIBでは、あるUIViewController(識別子=リスト)から別のUIViewController(識別子=詳細)にプッシュするセグエを作成しました。その後、

prepareForSegue

これは、テスト目的で一部のデータを引き継ぐために行います。

Detail *detailsViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Details"];

NSLog(@"Current \"Details\" class in use: %@",detailsViewController);

NSLog(@"Prep Complete, Testing begins==============");
detailsViewController.TitleField.text = @"Random Text";
detailsViewController.DuedateField.text = [NSString stringWithFormat:@"%@",[NSDate date]];
detailsViewController.ReminderFieldOne.text = [NSString stringWithFormat:@"%@",[NSDate date]];
detailsViewController.ReminderFieldTwo.text = [NSString stringWithFormat:@"%@",[NSDate date]];
detailsViewController.NotesArea.text = @"Note 1: This doesnt seem to work.";

NSLog(@"Items from %@:",detailsViewController);
NSLog(@"Title Field = %@",detailsViewController.TitleField.text);
NSLog(@"Duedate field = %@",detailsViewController.DuedateField.text);
NSLog(@"Reminder field 1 = %@",detailsViewController.ReminderFieldOne.text);
NSLog(@"Reminder field 2 = %@",detailsViewController.ReminderFieldTwo.text);
NSLog(@"Notes = %@",detailsViewController.NotesArea.text);

NSLog(@"===============Testing Complete");

しかし、ほとんどすべてのNSLogは、データが送信されたのと同じdetailsViewControllerから(null)値を返します。

2012-02-08 13:38:53.016 TodoApp[10132:fb03] Items from <Detail: 0x6d70120>:
2012-02-08 13:38:53.017 TodoApp[10132:fb03] Title Field = (null)
2012-02-08 13:38:53.017 TodoApp[10132:fb03] Duedate field = (null)
2012-02-08 13:38:53.018 TodoApp[10132:fb03] Reminder field 1 = (null)
2012-02-08 13:38:53.019 TodoApp[10132:fb03] Reminder field 2 = (null)
2012-02-08 13:38:53.020 TodoApp[10132:fb03] Notes = (null)

なぜそれが(null)であるかを理解するために、私はしばらくそれをやっています。なぜこれが起こるのか誰かが何か手がかりを持っていますか?私は何かが足りないのですか?

御時間ありがとうございます!

編集:編集された詳細ビューとロードされた詳細ビューは異なるように見えますが、ログが編集されたものと同じ詳細ビューからフェッチデータを返す(null)理由を説明していません。

2012-02-08 14:41:11.937 TodoApp[10567:fb03] Current "Details" class in use: <Detail: 0x6a883a0>
2012-02-08 14:41:11.937 TodoApp[10567:fb03] Prep Complete, Testing begins==============
2012-02-08 14:41:11.939 TodoApp[10567:fb03] Items from <Detail: 0x6a883a0>:
2012-02-08 14:41:11.940 TodoApp[10567:fb03] Title Field = (null)
2012-02-08 14:41:11.940 TodoApp[10567:fb03] Duedate field = (null)
2012-02-08 14:41:11.941 TodoApp[10567:fb03] Reminder field 1 = (null)
2012-02-08 14:41:11.942 TodoApp[10567:fb03] Reminder field 2 = (null)
2012-02-08 14:41:11.942 TodoApp[10567:fb03] Notes = (null)
2012-02-08 14:41:11.943 TodoApp[10567:fb03] ===============Testing Complete
2012-02-08 14:41:11.953 TodoApp[10567:fb03] View Loaded: <Detail: 0x6d1feb0>

代わりにロードするようにアプリに指示する方法はありますか?

4

2 に答える 2

0

このメソッドについてAppleのドキュメントを正しく読んでいると、最後に「このメソッドは、呼び出すたびに、指定されたViewControllerの新しいインスタンスを作成する」と記載されています。だからあなたは非常に注意しなければなりません。

于 2012-02-08T12:14:49.120 に答える
0

-viewDidLoadメソッドが呼び出される前に、アウトレットが初期化されていないためです。保存する値ごとにiVarを作成し、宛先コントローラーのinitメソッドの後に割り当てます。次に、これらの値をviewDidLoadのアウトレットに割り当てます。

例えば

宛先コントローラーの.hファイル内

@property (nonatomic, copy) NSString *noteText;

それで

Detail *detailsViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Details"];
detailsViewController.noteText = @"Note 1: This doesnt seem to work.";

そしてdetailsViewController-viewDidLoadメソッド

- (void)viewDidLoad {
  [super viewDidLoad];
  self.NotesArea.text = noteText;
}
于 2012-02-08T12:07:22.183 に答える