Оригинальный вопрос ниже.
Я исправил свою проблему. У меня был один и тот же контроллер представления, установленный для просмотра таблицы и отображения карты. И у меня была вся моя инициализация 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];