iPhone - значение NSString не устанавливается - PullRequest
1 голос
/ 26 ноября 2009

Внутри UIViewController я выполняю следующее:


TVController* stopTimes = [ [ TVController alloc ] initWithStyle: UITableViewStyleGrouped ];
stopTimes.tableView.frame = CGRectMake( 0, 180, 320, 280 );
stopTimes.tableView.backgroundColor = [ UIColor whiteColor ];
stopTimes.theID = stopID;
[ self.view addSubview: stopTimes.tableView ];

где TVController является UITableViewController.

Внутри класса TVController у меня есть свойство NSString, которое называется theID, которое было синтезировано. Я не получаю ошибок, когда выполняю «stopTimes.theID = stopID» выше, и TableView выглядит, как и ожидалось.

В 'viewDidLoad' этого класса TVController я просто пытаюсь NSLog 'theID', чтобы показать, что он работает, но это (ноль) независимо от того, что я делаю.

Однако я попытался установить текст ячейки в 'theID', и он работал просто отлично.

Так почему же 'theID' установлен правильно при настройке ячейки, а не в viewDidLoad?

1 Ответ

1 голос
/ 26 ноября 2009

viewDidLoad будет вызываться сразу после загрузки представления, либо из вашей NIB, либо из вашей реализации loadView. Представление загружается при первом обращении к свойству view контроллера представления, а не когда контроллер представления выделен или в какой-то более поздний момент.

Это означает, что loadView (реализация по умолчанию, которая загружает ваш NIB, если он у вас есть), а затем viewDidLoad в первый раз вызывается во второй строке, потому что вы обращаетесь к свойству tableView вашего контроллера представления и, конечно, происходит до того, как вы фактически установите значение для свойства theID контроллера представления. Конечно, к моменту загрузки содержимого вашей таблицы (что не произойдет до тех пор, пока табличное представление не появится, если вы сами не вызовете -reloadContent в другом месте), ваше свойство theID будет установлено.

Вы можете очень просто самостоятельно проверить это, установив две точки останова в отладчике - одну в третьей строке фрагмента кода выше, где вы устанавливаете свойство theID, и одну в вызове NSLog () в viewDidLoad. Вы увидите, что последняя точка останова срабатывает первой.

P.S. Добро пожаловать в переполнение стека! Не забудьте прочитать часто задаваемые вопросы и отметить принятые ответы на свои вопросы (если они, конечно, стоят хороших ответов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...