【问题标题】:Is there a change in the processing of the order of events in iOS 8.1 and xCode 6iOS 8.1 和 xCode 6 中事件顺序的处理是否有变化
【发布时间】:2014-11-03 16:30:45
【问题描述】:

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

自从我最初发布该应用程序以来,这一直没有问题。我目前正在向我的应用程序添加一项新功能,并注意到我无法解决的行为差异。

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

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

对于我在 App Store 中的现有应用程序,如果我正在编辑 UITextField 并单击电子邮件按钮,事件将按照 Editing Did End -> save() THEN Touch Up Inside -> sendEmail() 的顺序触发。

在我的 beta 二进制文件运行时,执行相同的步骤会以相反的顺序触发事件:Touch Up Inside -> sendEmail() THEN Editing Did End -> save()

这会导致问题,因为我的最新值尚未保留,并且它们未包含在电子邮件中。

这些事件是否已重新排序?我需要在我的应用程序中更改某些内容以允许这些内容吗?我可以通过使用开始编辑来解决它,设置一个标志来说明它是脏的,然后在生成电子邮件之前调用保存,但这似乎更像是一个黑客而不是一个解决方案。

所以我想我会问。

谢谢!

【问题讨论】:

  • 为什么不直接在电话save()sendEmail() 进行修饰?
  • 我试过了 - 但他们似乎仍然无法正常开火。我会再试一次。

标签: ios objective-c iphone xcode


【解决方案1】:

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

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

一种方法是使用像dataIsModified 这样的布尔值,无论何时修改任何数据都将其设置为true,并在保存完成时重置。然后在邮件发送方法中,检查是否dataIsModified,然后再次保存。

【讨论】:

  • 这就是我想要的,但我不知道是否需要。
猜你喜欢
  • 2010-12-16
  • 1970-01-01
  • 2011-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-27
  • 1970-01-01
相关资源
最近更新 更多