滚动结束时UIPickerView崩溃,但已经释放了选择器视图

时间:2011-07-25 08:03:52

标签: iphone uipickerview

我对UIPickerView有一个小问题。它是显示为SemiModalViewController的类的一部分,可以通过按下OK按钮随时解除(和释放)。该类还实现了UIPickerView委托函数,以接受任何选择更改等。

问题是当按下OK按钮时UIPickerView可能仍然滚动到一个条目 - 这当然会导致崩溃,因为滚动结束将尝试调用已经释放的选择已更改的委托UIPickerView的父类。

有没有办法检查选择器视图是否处于滚动状态并在我解除父类之前等待它结束?我宁愿将委托函数留给上面提到的父类,因为这会形成一个'可忽略的一般Picker'UI组件,而我宁愿不保留所有这些类,直到应用程序结束只是为了确保滚动挑选者最终结束......

3 个答案:

答案 0 :(得分:0)

我不认为有一种方法可以检查thUIPicker是否是动画,但你可以在关闭模态视图的方法中做一些检查。检查当前选择索引等待.5秒,然后再次检查。如果它链接你知道它仍然滚动。

答案 1 :(得分:0)

好的,我开发了一个解决方案......

实际上,我想要做的就是确保Picker不会尝试将Selection Changed事件发送到不存在的父类。如果选择器仍在滚动,那也可能意味着只丢弃它可能达到的任何最终值。

不幸的是,UIDatePicker和UIPickerView的行为也大不相同,所以解决方案比我想象的要多一些。

对于那些感兴趣的人:

我创建了一个单例类,跟踪我创建的所有选择器。这个单例类也可以作为所有Picker回调的委托 - 所以所有选择器都会成功调用它们。当然,如果父类不再存在,结果将被丢弃。

一旦我摆脱了一个Picker,单身人士会在x秒之后将其标记为删除,并在接下来的选择器列表中将其删除。事实上,我可以立即删除Picker,因为单身人士仍然会从该选择器中取回任何回调而忽略结果。

有些努力,但它现在就像一个魅力。在所有情况下不再发生崩溃和定义的行为: - )。

答案 2 :(得分:0)

我遇到了类似的问题并通过添加

解决了这个问题
picker.delegate = nil;

在解除父视图控制器之前。发送消息给nil很好,我相信花花公子。

然而,这可能会导致选择器中的视图切换为“?”标签暂时。

相关问题