Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 滚动结束时UIPickerView崩溃,但picker视图已被释放_Iphone_Uipickerview - Fatal编程技术网

Iphone 滚动结束时UIPickerView崩溃,但picker视图已被释放

Iphone 滚动结束时UIPickerView崩溃,但picker视图已被释放,iphone,uipickerview,Iphone,Uipickerview,我对UIPickerView有个小问题。它是显示为SemiModalViewController的类的一部分,可通过按OK按钮随时解除(并释放)该类。此类还实现UIPickerView委托函数以接受任何选择更改等 问题是,当按下OK按钮时,UIPickerView可能仍在滚动到某个条目-这当然会导致崩溃,因为滚动的结束将尝试调用UIPickerView的已释放父类中的selection changed委托 有没有办法检查picker视图是否处于滚动状态,并在我关闭父类之前等待它结束?我宁愿将委托

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

问题是,当按下OK按钮时,UIPickerView可能仍在滚动到某个条目-这当然会导致崩溃,因为滚动的结束将尝试调用UIPickerView的已释放父类中的selection changed委托


有没有办法检查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发个短信是件好事


然而,这可能会导致挑选者中的视图瞬间切换到“?”标签。

等待和检查始终是一种可能,但也总是感觉像是一种黑客行为……虽然我在这里找到了某种答案:,但也有点黑客行为……嗯,有时候你必须这么做。等待和检查始终是一种可能,但它也总是让人感觉像黑客……虽然我在这里找到了某种答案:,但它也有点黑客味……嗯,有时候你必须这么做。