Как я могу повторно загрузить searchDisplayController, встроенный в раскадровку, после предупреждения о памяти? - PullRequest
2 голосов
/ 06 марта 2012

Этот проект предназначен для iPhone с iOS 5 с использованием ARC и Core Data.

Все встроенные раскадровки Xcode, у меня есть UITabBarController с несколькими вкладками. Три из этих представлений UITableViewControllers с прикрепленным UISearchDisplayController. Если я имитирую предупреждение памяти в симуляторе iPhone, то все виды, которые не активны, сбрасываются, и когда я нажимаю на вкладке одно из этих представлений с помощью searchDisplayController, NSZombieEnabled сообщает мне -[UISearchDisplayController retain]: message sent to deallocated instance.

Вот мой -didReceiveMemoryWarning:

- (void)didReceiveMemoryWarning
{
    [(PahAppDelegate *)[[UIApplication sharedApplication] delegate] saveContext];
    // Release any cached data, images, etc that aren't in use.
    self.searchWasActive = [self.searchDisplayController isActive];
    self.savedSearchTerm = [self.searchDisplayController.searchBar text];
    self.savedScopeButtonIndex = [self.searchDisplayController.searchBar selectedScopeButtonIndex];

    self.fetchedResultsController.delegate = nil;
    self.fetchedResultsController = nil;
    self.searchFetchedResultsController.delegate = nil;
    self.searchFetchedResultsController = nil;

    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];
}

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

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

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

1 Ответ

1 голос
/ 06 марта 2012

Это определенно похоже на, возможно, раскадровку, ошибку.Как упомянуто здесь: UISearchDisplayController вызывает сбой после viewDidUnload , новый проект, использующий раскадровки и UISearchDisplayController, может воспроизвести это, даже не подключая выход для UISearchDisplayController в ваш контроллер.Предложение в этой теме кажется нормальным, создайте UISearchDisplayController в коде.Я не могу поручиться за обходной путь, поскольку я не тестировал его, но мне было любопытно, и я воспроизвел новый проект = заявление о сбое и увидел то же самое.

...