View Controller ведет себя по-разному, когда установлен как «начальный контроллер представления», и загружается с presentModalViewController - PullRequest
0 голосов
/ 19 января 2012

Мое приложение имеет карту, которая отслеживает местоположение пользователя. Эта карта будет отображаться только при определенных обстоятельствах и будет доминировать над вниманием пользователя до тех пор, пока не будет выполнена конкретная задача, поэтому карта не является частью интерфейса навигации или панели вкладок.

Если моя карта VC установлена ​​в качестве начального контроллера представления в раскадровке, она работает нормально. Но если я попытаюсь загрузить карту VC из другого места, как это;

MapViewController *mapVC = [[MapViewController alloc] init];
[self presentModalViewController:mapVC animated:YES];

У меня просто черный экран.

Я могу подтвердить с помощью NSLog, что VC вызывает viewDidLoad и viewDidAppear, но свойство VC 'map' равно (null). Я не понимаю, почему (или как) мне нужно создавать свойство карты вручную при использовании этой техники, но это делается для меня, когда это начальный VC.

1 Ответ

1 голос
/ 19 января 2012

Экземпляр MapViewController в вашей раскадровке настроен с иерархией представлений, включая MKMapView и все, что вы сделали для настройки этого конкретного экземпляра в раскадровке.

Теперь в этом коде, который вы здесь показываете, вы создаете совершенно новый экземпляр MapViewController. Он не имеет отношения к экземпляру в раскадровке, за исключением того, что они принадлежат к одному классу. Таким образом, тот, который вы создаете здесь с помощью [[MapViewController alloc] init], не имеет иерархии представлений (именно поэтому вы видите черный экран), и ни один из выходов или другой конфигурации, которую вы, возможно, внесли в другой MapViewController в вашей раскадровке .

Итак, вам нужно загрузить MapViewController, который вы уже настроили, из раскадровки. Предполагая, что вы делаете это из метода в другом контроллере представления , загруженного из той же раскадровки уже , вы можете просто сделать это:

// within some method on another vc from a scene in the same storyboard:

// given an identifier for the map view controller we want to load:
static NSString *mapVCIdentifier = @"SomeAppropriateIdentifier";

NSLog(@"Storyboard: %@",self.storyboard); // make sure this vc(self) was loaded from a storyboard
MapViewController *mapVC = [self.storyboard instantiateViewControllerWithIdentifier:mapVCIdentifier];
[self presentModalViewController:mapVC animated:YES];

А затем вернувшись в раскадровку, просто убедитесь, что для идентификатора этого контроллера представления карты установлено значение «SomeAppresponIdentifier».

Надеюсь, это поможет.

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