我使用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
属性,尽管它是相同的视图控制器但具有不同的数据?我试过了,但过了一段时间我也得到了错误。
修改
现在我发现,如果我没有设置passthroughViews
,那么它可以正常运行而不会崩溃。那么passthroughViews
有什么问题?哪个视图层次结构在passthroughViews
中有一个视图?
它适用于nil
,new UIView()
和new UICollectionViewCell()
,但既不是UICollectionView
的实例,也不是UICollectionViewCell
的实例...... < / p>
同时在completion handler中设置passthroughViews
也没有帮助。
此外,如果我使用相同的视图控制器和内容从相同的UIView
启动弹出窗口,我可以每次都显示和关闭popover而不会崩溃。如果我直接选择其中一个直通视图,应用程序只会崩溃!是以错误的方式使用DismissViewController
吗?
现在我尝试使用默认的UIViewController
作为popover的内容,行为是相同的。所以它不是popover的内容。
编辑2:
可能会出现问题,因为UICollectionView
中的视图无法用作passthroughViews
。你有没有人试过吗?我没有找到任何解决方案,所以我唯一的解决方案就是不要在iOS 8及更高版本上使用passthroughViews
。在iOS 7上它运行正常。
答案 0 :(得分:0)
@property(非原子,强)UIPopoverPresentationController * popup;
我们必须在头文件中定义以防止此类警告和强引用错误。