2016-02-03 2 views
0

Я использую UIPopoverPresentationController и после показа поповер несколько раз я получаю ошибкуКак работают passthroughViews в UIPopoverPresentationController?

UIPopoverPresentationController (<UIPopoverPresentationController: 0x7b259aa0>) should have a non-nil sourceView or barButtonItem set before the presentation occurs. 

Самое интересное, что это еще один пример, чем я. У меня есть sourceView, который не ноль. Мой экземпляр - 0x7b615680, а не 0x7b259aa0.

Теперь возникает вопрос, откуда этот экземпляр, и почему он используется вместо моего? Насколько я знаю, iOS управляет временем жизни сам по себе, поэтому не требуется сильная ссылка (как в iOS 7), и не должно быть проблем с управлением памятью.

Требуется ли iOS каждый раз, когда новое свойство popoverPresentationController находится у контроллера вида, несмотря на то, что это тот же контроллер, но с разными данными? Я пробовал это, но я также получаю сообщение об ошибке через некоторое время.

Edit:

Теперь я узнал, что если я не установлю passthroughViews то она работает без сбоев. Так что же случилось с passthroughViews? В какой иерархии представлений есть вид в passthroughViews?

Это делает работу с nil, new UIView() и new UICollectionViewCell(), но ни с экземпляром UICollectionView, ни с экземпляром UICollectionViewCell ...

установка также passthroughViews в completion handler не помогло.

Кроме того, я могу показывать и отклонять popover каждый раз без сбоя, если я начну использовать popover из того же UIView с тем же контроллером и контентом. Приложение только сбой, если я непосредственно выбираю один из представлений пересылки! Использует ли DismissViewController неправильный путь?

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

Edit 2:

Возможно, возникает проблема, потому что вид в UICollectionView не могут быть использованы в качестве passthroughViews. Кто-нибудь из вас пробовал это? Я не нашел никакого решения, поэтому единственное решение для меня - не использовать passthroughViews на iOS 8 и выше. На iOS 7 работает нормально.

ответ

0

@property (неатомный, сильный) UIPopoverPresentationController * popup;

Мы должны определить в файле заголовка, чтобы предотвратить такие предупреждения и ошибки с сильной ссылкой.

+0

Почему это работает, если не заданы 'passthrougViews'? – testing

+0

Должен ли я переписывать свойство каждый раз, когда хочу отображать popover, потому что я могу получить доступ только к 'UIPopoverPresentationController', получив его непосредственно из представленного контроллера представления ... – testing

Смежные вопросы