У меня есть приложение с простым шаблоном "детализации". Я представляю список элементов либо в режиме карты, либо в режиме списка. Нажав на один из них, вы перейдете к более подробному «редактированию» контроллера представления. Мой контроллер редактирования имеет
@property (assign, nonatomic) BOOL showMap;
И в методах установки/получения исходной реализации:
#pragma mark - Properties
- (BOOL) showMap {
return self.viewModeSegments.selectedSegmentIndex == 1;
}
- (void) setShowMap: (BOOL) showMap {
self.view; // had to add this, it's a hack
self.viewModeSegments.selectedSegmentIndex = showMap ? 1 : 0;
}
Я установил это свойство в инициирующем контроллере с помощью:
#pragma mark - Navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString: @"ValveEditSegue"]) {
ValveEditController* controller = segue.destinationViewController;
controller.valve = self.selections.anyObject;
controller.showMap = ShowMap;
}
}
Что я обнаружил, так это то, что установщик showMap
происходит до того, как view
был заполнен, поэтому viewModeSegments
все еще был nil
. Я экспериментировал с хаком, показанным в сеттере, который заставляет доступ к self.view
, чтобы убедиться, что он загружен. Но это кажется плохой идеей. Чего я не знаю, так это того, какой шаблон мне должен использовать вместо этого.
Я мог бы сделать showMap
нормальным свойством с поддержкой, а затем отразить это состояние в виджете в viewDidLoad
раз, но это кажется глупым иметь свойство/состояние только для этого одноразового эффекта, подобного батуту.