Iphone 滚动结束时UIPickerView崩溃,但picker视图已被释放
我对UIPickerView有个小问题。它是显示为SemiModalViewController的类的一部分,可通过按OK按钮随时解除(并释放)该类。此类还实现UIPickerView委托函数以接受任何选择更改等 问题是,当按下OK按钮时,UIPickerView可能仍在滚动到某个条目-这当然会导致崩溃,因为滚动的结束将尝试调用UIPickerView的已释放父类中的selection changed委托Iphone 滚动结束时UIPickerView崩溃,但picker视图已被释放,iphone,uipickerview,Iphone,Uipickerview,我对UIPickerView有个小问题。它是显示为SemiModalViewController的类的一部分,可通过按OK按钮随时解除(并释放)该类。此类还实现UIPickerView委托函数以接受任何选择更改等 问题是,当按下OK按钮时,UIPickerView可能仍在滚动到某个条目-这当然会导致崩溃,因为滚动的结束将尝试调用UIPickerView的已释放父类中的selection changed委托 有没有办法检查picker视图是否处于滚动状态,并在我关闭父类之前等待它结束?我宁愿将委托
有没有办法检查picker视图是否处于滚动状态,并在我关闭父类之前等待它结束?我宁愿将委托函数留给前面提到的父类,因为这形成了一个“可撤销的通用选择器”UI组件,我不想在应用程序结束之前保留所有这些类,只是为了确保选择器的滚动最终结束…我不认为有方法可以检查Thuipcker是否正在制作动画,但是你可以在关闭模态视图的方法中做一点检查。检查当前的选择索引。请等待5秒,然后再次检查。如果它链接了,你知道它还在滚动。我不认为有什么方法可以检查Thuipcker是否正在制作动画,但是你可以在关闭模态视图的方法中做一些检查。检查当前的选择索引。请等待5秒,然后再次检查。如果它链接到你知道它仍在滚动。好的,我开发了一个解决方案 事实上,我所要做的就是确保选择器不会尝试将Selection Changed事件发送到不存在的父类。在选择器仍在滚动的情况下,这也可能意味着丢弃它可能达到的任何结束值 不幸的是,UIDatePicker和UIPickerView在行为上也有很大的不同,所以解决方案比我想象的要多一些 对于感兴趣的人: 我创建了一个singleton类,它跟踪我创建的所有选择器。这个单例类还充当所有选择器回调的委托-因此所有选择器都会成功调用它们。当然,如果父类不再存在,结果将被丢弃 一旦我删除了一个选择器,单例程序会在x秒后将其标记为删除,并在该时间前后将其从后续选择器列表中删除。事实上,我可以立即删除选择器,因为单例仍然会接受来自该选择器的任何回调,而忽略结果
有些努力,但它现在起作用了。没有更多的崩溃,并且在所有情况下都定义了行为:-)。好的,我开发了一个解决方案 事实上,我所要做的就是确保选择器不会尝试将Selection Changed事件发送到不存在的父类。在选择器仍在滚动的情况下,这也可能意味着丢弃它可能达到的任何结束值 不幸的是,UIDatePicker和UIPickerView在行为上也有很大的不同,所以解决方案比我想象的要多一些 对于感兴趣的人: 我创建了一个singleton类,它跟踪我创建的所有选择器。这个单例类还充当所有选择器回调的委托-因此所有选择器都会成功调用它们。当然,如果父类不再存在,结果将被丢弃 一旦我删除了一个选择器,单例程序会在x秒后将其标记为删除,并在该时间前后将其从后续选择器列表中删除。事实上,我可以立即删除选择器,因为单例仍然会接受来自该选择器的任何回调,而忽略结果
有些努力,但它现在起作用了。没有更多的崩溃,并且在所有情况下都定义了行为:-)。我遇到了类似的问题,并通过添加
picker.delegate = nil;
在解除父视图控制器之前。我相信,给nil发个短信是件好事
但是,这可能会导致选择器中的视图瞬间切换到“?”标签。我遇到了类似的问题,并通过添加
picker.delegate = nil;
在解除父视图控制器之前。我相信,给nil发个短信是件好事
然而,这可能会导致挑选者中的视图瞬间切换到“?”标签。等待和检查始终是一种可能,但也总是感觉像是一种黑客行为……虽然我在这里找到了某种答案:,但也有点黑客行为……嗯,有时候你必须这么做。等待和检查始终是一种可能,但它也总是让人感觉像黑客……虽然我在这里找到了某种答案:,但它也有点黑客味……嗯,有时候你必须这么做。