Случайный UISearchDisplayController Crash (iOS 7)

Я пытался исправить крах, который составляет около 50% моих пользователей. Сбой начался после того, как я реализовал UISearchDisplayController (т. Е. Добавил строку поиска в табличное представление), но я не смог воспроизвести авария, даже не один раз. По словам моих пользователей, они мгновенно сбой (или замораживание), когда они открывают табличное представление с UISearchDisplayController.

Согласно Crashlytics, авария происходит на:

-[UISearchDisplayController _updateTableHeaderBackgroundViewInTableView:amountScrolledUnder:] 

Я создал UITableView программно, но я добавил UISearchBar / UISearchDisplayController в основном через IB.

Что касается «фонового представления заголовка таблицы», о котором, похоже, относится авария, я делал две вещи раньше. Во-первых, я устанавливал представление фонового представления таблиц на ноль:

 [self.tableView setBackgroundView:nil]; 

Во-вторых, я тоже это делал:

 - (NSString *)tableView:(UITableView *)aTableView titleForHeaderInSection:(NSInteger)section { if (aTableView != nil && self.searchDisplayController != nil) { if (self.searchDisplayController.isActive) { return nil; } else { return [super sectionAtIndex:section].headerTitle; } } else { return [super sectionAtIndex:section].headerTitle; } } 

С тех пор я изменил представление фона на __strong UIView с размером кадра CGZero, то есть я просто добавил сильное, пустое представление к фону. Кроме того, во втором фрагменте кода вместо возврата nil я возвращаю пустую строку @ "".

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

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

ОБНОВЛЕНИЕ : Вот полный сбой.

 Thread : Crashed: com.apple.main-thread 0 libobjc.A.dylib 0x0000000191f179d0 objc_msgSend + 16 1 UIKit 0x0000000188f63820 -[UISearchDisplayController _updateTableHeaderBackgroundViewInTableView:amountScrolledUnder:] + 164 2 UIKit 0x0000000188f63394 -[UISearchBar _didMoveFromWindow:toWindow:] + 312 3 UIKit 0x0000000188e6e42c -[UIView(Internal) _didMoveFromWindow:toWindow:] + 684 4 UIKit 0x0000000188e9280c -[UIScrollView _didMoveFromWindow:toWindow:] + 68 5 UIKit 0x0000000188e6dba0 __45-[UIView(Hierarchy) _postMovedFromSuperview:]_block_invoke + 148 6 UIKit 0x0000000188e6d998 -[UIView(Hierarchy) _postMovedFromSuperview:] + 292 7 UIKit 0x0000000188e7c4ec -[UIView(Internal) _addSubview:positioned:relativeTo:] + 1628 8 UIKit 0x000000018906af44 -[_UIParallaxDimmingView didMoveToWindow] + 144 9 UIKit 0x0000000188e6e768 -[UIView(Internal) _didMoveFromWindow:toWindow:] + 1512 10 UIKit 0x0000000188e6e42c -[UIView(Internal) _didMoveFromWindow:toWindow:] + 684 11 UIKit 0x0000000188e6dba0 __45-[UIView(Hierarchy) _postMovedFromSuperview:]_block_invoke + 148 12 UIKit 0x0000000188e6d998 -[UIView(Hierarchy) _postMovedFromSuperview:] + 292 13 UIKit 0x0000000188e7c4ec -[UIView(Internal) _addSubview:positioned:relativeTo:] + 1628 14 UIKit 0x000000018906a67c __53-[_UINavigationParallaxTransition animateTransition:]_block_invoke + 1636 15 UIKit 0x0000000188e82bb8 +[UIView(Animation) performWithoutAnimation:] + 88 16 UIKit 0x0000000189069d54 -[_UINavigationParallaxTransition animateTransition:] + 828 17 UIKit 0x0000000189022078 -[UINavigationController _startCustomTransition:] + 2724 18 UIKit 0x0000000188f2c794 -[UINavigationController _startDeferredTransitionIfNeeded:] + 464 19 UIKit 0x0000000188f2c564 -[UINavigationController __viewWillLayoutSubviews] + 56 20 UIKit 0x0000000188f2c4e4 -[UILayoutContainerView layoutSubviews] + 200 21 UIKit 0x0000000188e6ed78 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 348 22 QuartzCore 0x0000000188a6b0cc -[CALayer layoutSublayers] + 184 23 QuartzCore 0x0000000188a65c94 CA::Layer::layout_if_needed(CA::Transaction*) + 300 24 QuartzCore 0x0000000188a65b4c CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 32 25 QuartzCore 0x0000000188a653d4 CA::Context::commit_transaction(CA::Transaction*) + 280 26 QuartzCore 0x0000000188a65178 CA::Transaction::commit() + 424 27 QuartzCore 0x0000000188a5ea30 CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) + 80 28 CoreFoundation 0x0000000185f5f7e0 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 32 29 CoreFoundation 0x0000000185f5ca68 __CFRunLoopDoObservers + 372 30 CoreFoundation 0x0000000185f5cdf4 __CFRunLoopRun + 764 31 CoreFoundation 0x0000000185e9db38 CFRunLoopRunSpecific + 452 32 GraphicsServices 0x000000018b8c3830 GSEventRunModal + 168 33 UIKit 0x0000000188edc0e8 UIApplicationMain + 1156 34 Flash Reader 0x00000001000904dc main + 17 (main.m:17) 35 libdyld.dylib 0x0000000192507aa0 start + 4 

ОБНОВЛЕНИЕ 2 : Кажется, что это происходит только на iPhone 5S, и это также объясняет, почему я не могу воспроизвести это. У меня такое чувство, что это связано с этим блоком кода:

 CGRect newBounds = self.tableView.bounds; if (self.tableView.bounds.origin.y < 44) { newBounds.origin.y = newBounds.origin.y + self.searchDisplayController.searchBar.bounds.size.height; self.tableView.bounds = newBounds; } // new for iOS 7 if (self.tableView != nil && self.staticContentSections.count > 0) { [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0] atScrollPosition:0 animated:YES]; } 

Я надеюсь, что это то, что вызывает крах, потому что если так, я надеюсь исправить это, просто сделав это в viewWillAppear:

 self.edgesForExtendedLayout = UIRectEdgeNone; self.tableView.contentOffset = CGPointMake(0, 44); 

ОБНОВЛЕНИЕ 3 : Ну, это не исправить. Это все равно происходит либо случайным образом, либо каждый раз, когда у пользователя есть iPhone 5S. Это не происходит в симуляторе 5S, но я не могу отлаживать его дальше, так как у меня нет 5S. Я начинаю думать, что это ошибка iOS 7, а не ошибка с самим приложением.

One Solution collect form web for “Случайный UISearchDisplayController Crash (iOS 7)”

Я получил сбой в iOS 8.0. Я исправил это, установив searchBar.delegate = nil в dealloc (deinit) контроллера вида.

  • Как сообщить всем моим ограничениям автоматического макета, чтобы обновить себя? (Например, когда пользователь обновляет свой размер системы / Динамический тип)?
  • Производительность UITableView с объектами Realm в cellForRowAt indexPath
  • Почему этот UISearchBar изменяется?
  • Как исправить медленное представление таблицы прокрутки
  • Иногда ячейка UITableView не обновляет изображение, но отображается после прокрутки
  • Различные ячейки в TableView Swift 3
  • Сделать прокрутку UITableView сверху вниз в течение заданного периода времени?
  • Изменение атрибута UITableView для выбора строки
  • Открыть программные кнопки редактирования UITableView программно
  • Цель c - Лучшая практика для обработки события нажатия кнопки для кнопки пользовательского UITableViewCell
  • UITableView indexPath последней строки
  • Interesting Posts

    Изменение направления текста UITextView

    Сортировка NSMetadataQuery по дате обновления не работает

    Использование GPX-файла в iOS-симуляторе не останавливается на последней координате, продолжает цикл

    Обновление TableView после удаления анимации завершается

    В чем разница между NS_ENUM и NS_OPTIONS?

    период интервала фоновой задачи в IOS 7

    Производительность измерительного кода игровой площадки XCode 6

    Является ли текущий класс Reachability от Apple совместимым с iOS 3.1?

    viewDidLoad для UIView?

    UISearchbar searchBarTextDidEndEditing не называется

    У вас есть выделенный UIViewController для каждого RootElement в MonoTouch.Dialog?

    Фоновая служба IOS (например, в Android) включает все время

    Совместное использование UIImage для UIActivityViewController Twitter / Facebook очень медленно, чтобы показать диалог

    Простой заголовок в наборе настроек ios

    UIViewController не подходит для кодирования ключа для ключа XXXXX. Неправильное соединение в IB

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.