Данные, перенесенные в UIViewController, возвращаются (null) - PullRequest
0 голосов
/ 08 февраля 2012

В моем IB я создал переход для перехода от одного 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");

И все же почти все NSLogs возвращают (нулевые) значения из того же detailsViewController, данные были отправленык.

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)

Я уже некоторое время занимаюсь этим, чтобы выяснить, почему это (ноль).Кто-нибудь знает, почему это происходит?Я что-то упустил?

Спасибо за ваше время!

РЕДАКТИРОВАТЬ: редактируемый подробный вид и загруженный кажутся различными, но это не объясняет, почему журналы возвращают (ноль) cozполучить данные из того же представления сведений, что и отредактированный.

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>

Есть ли способ, с помощью которого я могу сказать своему приложению загрузить взамен?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2012

Если вы правильно прочитали документацию Apple для этого метода, в конце они отметят, что «Этот метод создает новый экземпляр указанного контроллера представления каждый раз, когда вы вызываете его».Так что вы должны быть очень осторожны.

0 голосов
/ 08 февраля 2012

Поскольку выходы не инициализируются до вызова метода -viewDidLoad. Создайте iVars для каждого значения, которое вы хотите сохранить, и назначьте их после метода init целевого контроллера. Затем назначьте эти значения для торговых точек в viewDidLoad.

, например

в .h файле вашего конечного контроллера

@property (nonatomic, copy) NSString *noteText;

Тогда

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

А в деталях метод ViewController -viewDidLoad

- (void)viewDidLoad {
  [super viewDidLoad];
  self.NotesArea.text = noteText;
}
...