MKMapView продолжает возвращаться к мировоззрению - PullRequest
0 голосов
/ 08 марта 2011

Оригинальный вопрос ниже. Я исправил свою проблему. У меня был один и тот же контроллер представления, установленный для просмотра таблицы и отображения карты. И у меня была вся моя инициализация mapView в viewDidLoad. Оба вместе создали для меня следующие проблемы:

1) Когда контроллер панели вкладок был представлен модально, и я получил предупреждение о памяти, был вызван viewDidUnload (в котором я ничего не делал раньше). Когда модальный контроллер панели вкладок был отклонен и вызван viewDidLoad, он сбросил мой mapView. 2) Когда контроллер панели вкладок был представлен модально, и я получил предупреждение о памяти, прежде чем перейти на вкладку с контроллером представления, а затем переключился на эту вкладку, мой viewDidLoad был вызван в контроллере моего mapView, который сбросил мою карту, И он не сделал сбросьте свойства таблиц, чтобы мой tableView не работал.

Большое спасибо Аноми за помощь в отладке этой проблемы и более глубокое понимание того, как все эти части связаны. Теперь все работает отлично, и мое приложение имеет лучший дизайн.

Оригинальный вопрос: У меня есть приложение, у которого есть вид карты, и когда я представляю контроллер вида панели вкладок модально, каждый раз, когда я отменяю контроллер модального вида, карта сбрасывается обратно в вид на мир, как если бы на нем была нажата кнопка сброса. Несколько деталей:

  • Это НИКОГДА не происходит на симуляторе
  • Я замечаю предупреждения памяти в то время, когда это происходит на моем устройстве
  • Я ничего не делаю, когда в моем приложении появляются предупреждения памяти, поэтому ничто не должно было коснуться отображения карты

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

Код, который я использовал для создания контроллера, панели выбора и таблицы вкладок:

ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
picker.peoplePickerDelegate = self;
// Display only a person's address(es)
NSArray *displayedItems = [NSArray arrayWithObjects:[NSNumber numberWithInt:kABPersonAddressProperty],
                                                           nil];  
picker.displayedProperties = displayedItems;

UITabBarItem *peoplePickerTabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemContacts tag:0];
picker.tabBarItem = peoplePickerTabBarItem;

UITableViewController *tvc = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain];
tvc.tableView.delegate = self;
tvc.tableView.dataSource = self;
UINavigationController *nvc = [[UINavigationController alloc] initWithRootViewController:tvc];
UIBarButtonItem *uibbiCancel = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStylePlain target:self action:@selector(cancelTable)];
tvc.navigationItem.rightBarButtonItem = uibbiCancel;
tvc.title = @"Recents";
UITabBarItem *nvcTabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemRecents tag:2];
nvc.tabBarItem = nvcTabBarItem;

tbc = [[UITabBarController alloc] init];

NSArray *sections = [[NSArray alloc] initWithObjects:picker, nvc, nil];

[tbc setViewControllers:sections];

[self presentModalViewController:tbc animated:YES];
[nvcTabBarItem release];
[uibbiCancel release];
[tvc release];
[peoplePickerTabBarItem release];
[picker release];
[nvc release];
[sections release];
[tbc release];

1 Ответ

2 голосов
/ 08 марта 2011

Для вашего вида карты, вероятно, происходит следующее: когда UIViewController не отображается активно (например, он находится на неотображаемой вкладке UITabViewController, а не в видимом представлении в UINavigationController или скрыт модально представленный контроллер представления), он может освободить свое представление, если происходит уведомление памяти. Затем он будет воссоздавать вид при необходимости.

Что касается просмотра таблицы, я не уверен. Вы назначаете источник данных и делегируете табличное представление в коде, который создает содержащий контроллер представления, вместо того, чтобы делать это в методе viewDidLoad контроллера представления?

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