iOS 9.1 аварийно завершает работу приложения при включенном инспекторе специальных возможностей

Я использую HockeyApp для отчетов о сбоях. Я заметил сбой, который происходит часто и только с iOS 9.1. Сбой происходит, когда текстовое поле становится первым ответчиком, который также вызывает установку делегата UITableView. Сначала я изо всех сил пытался размножаться, но теперь я могу воспроизводить все время. Все, что мне нужно сделать, это включить инспектор специальных возможностей, и мое приложение рухнет. Причина сбоя: «Причина: имя селектора найдено в текущих регистрах аргументов: _accessibilitySetRetainedValue: forKey:», и сбой — это «SIGSEGV». Любые мысли о том, как это можно исправить?


person jherg    schedule 26.10.2015    source источник
comment
У вашего UITableView уже есть делегат, и вы устанавливаете для него нового делегата?   -  person kejadlen    schedule 27.10.2015
comment
Да. UITextField используется для поиска, а делегат изменяется, поэтому его необходимо обновить.   -  person jherg    schedule 27.10.2015


Ответы (1)


Мы столкнулись с чем-то подобным, что было вызвано чем-то вроде следующего:

@property (nonatomic, strong) id<UITableViewDelegate> delegate;
@property (nonatomic, strong) UITableVIew *tableView;

...

self.delegate = newDelegate;
self.tableView.delegate = newDelegate;

Исходный делегат освобождается, что обычно не является проблемой. Но, насколько мы можем судить, когда доступность включена, что-то там имеет assign ссылку на исходный делегат, а когда установлен новый делегат, что-то пытается очистить эту ссылку. Которого больше нет.

TL;DR: не освобождайте исходный делегат перед назначением нового в tableview:

self.tableView.delegate = newDelegate;
self.delegate = newDelegate;
person kejadlen    schedule 26.10.2015
comment
Это именно то, что происходит. Спасибо! - person jherg; 27.10.2015
comment
Столкнулся с тем же самым, за исключением самого VoiceOver на устройстве. Я предположил, что VoiceOver может добавлять сильные ссылки на определенные объекты, чтобы при необходимости (или что-то в этом роде) продолжать говорить. В сценарии с несколькими сильными ссылками вам всегда приходилось обнулять ваши слабые делегаты и тому подобное... Я думаю, сейчас мы находимся в ситуации, когда нам нужно обнулить делегатов даже для сценариев с одним сильным референсом, поскольку VoiceOver может добавить другие сильные стороны в миксе. Опять же, это не подтверждено, но пахнет примерно так. Возможно, можно было бы провести тест на подсчет ссылок! - person TahoeWolverine; 05.11.2015