iOS 8.1和xCode 6中事件顺序的处理是否发生了变化



我有一个简单的应用程序,上面有几个UITextField对象。在Editing Do End事件中,我调用第一响应程序save(),以便使用核心数据持久化数据。

自从我首次发布应用程序以来,这一直没有出现任何问题。我目前正在为我的应用程序添加一个新功能,并注意到一个无法解决的行为差异。

我有一个UIButton,它链接到Touch Up Inside事件,该事件触发了一个发送电子邮件的方法,该方法编译了所有已保存的数据。

然而,这些事件的顺序在我当前的二进制文件和新的二进制文件之间并不一致。

对于应用商店中的现有应用程序,如果我正在编辑UITextField并单击电子邮件按钮,则事件将按编辑结束->保存()然后内部修补->发送电子邮件()的顺序触发。

在运行测试版二进制文件的情况下,执行相同的步骤会使事件按相反的顺序启动:Touch Up Inside->sendEmail()THEN Editing Do End->save()

这导致了一些问题,因为我的最新值还没有持续存在,而且它们也没有包含在电子邮件中。

这些活动是否已重新安排?我的申请中有什么需要更改的地方吗?我可以通过使用编辑来解决这个问题。确实开始了,设置了一个标志来说明它是脏的,然后在生成电子邮件之前调用save,但这似乎更像是一个破解而非解决方案。

所以我想问问。

谢谢!

永远不要认为运行循环中内部Apple事件的顺序是有序的,尤其是当它们与独立对象相关时。

在这种情况下,将触发UITextField委托方法,并触摸UIButton。不要在代码中链接这两者。如果您需要在发送电子邮件前保存数据,请确保在发送电子邮件之前确实保存了数据。

一种方法是使用类似于dataIsModified的bool,每当修改任何数据时都将其设置为true,并在保存完成时重置。然后在电子邮件发送方法中,检查dataIsModified,然后再次保存。

最新更新