【问题标题】:How to implement UINavigationControllerDelegate to call web service for data driven app如何实现 UINavigationControllerDelegate 为数据驱动的应用程序调用 Web 服务
【发布时间】:2012-02-05 18:19:41
【问题描述】:

在我的应用中,我有 5 个导航控制器。其中一个导航控制器显示 3 个视图控制器共享相同的数据(来自 Sqlite 数据库)。唯一的区别是它们以不同的方式呈现数据:

  • ViewController 1 = 按国家/地区排序的食谱
  • ViewController 2 = 按蔬菜分类的食谱
  • ViewController 1 = 按要搭配的葡萄酒排序的食谱

Sqlite 数据库由网络服务提供。由于可以随时添加新食谱,因此我需要在应用程序激活时刷新数据库。由于应用程序可以在任何视图控制器上激活(取决于应用程序进入后台时选择的那个),我必须在 3 个视图控制器实现文件中编写刷新代码。

我认为这种方法很糟糕,因为当用户在导航控制器之间切换时会调用 Web 服务。这会创建频繁且无用的流量和数据库更新。我宁愿每次应用程序使用(活动/后台)只做一次这项工作。我在想 UINavigationControllerDelegate。这样,当应用程序变为活动状态时,无论导航控制器是什么,我都会只进行一次刷新。

我的问题是:

  • 您认为这是一种好方法还是您会建议其他方法?
  • 你知道在这种情况下如何实现 UINavigationControllerDelegate 吗?
  • 这只能在 App Delegate 中进行还是我可以在外部进行?

提前感谢您的帮助。

【问题讨论】:

  • 事实上,我让它变得更简单了。我只是在视图之间传递一个变量,让他们知道刷新是否完成。从 Web 服务加载提要并刷新数据库的第一个视图会启动变量。然后变量通过视图传递。它不像我想要的那样干净,但它可以完成工作。

标签: iphone uinavigationcontroller data-driven


【解决方案1】:

你在正确的轨道上。我认为您应该创建一个单独的类来进行刷新,并且您应该从您的 appDelegate 调用该类

 applicationDidBecomeActive:

方法。它真的应该与导航控制器无关。

【讨论】:

  • 感谢您的回答 Rayfleck。但是,由于我有 5 个导航控制器,它们对其他数据执行相同的操作,我不希望从 App Delegate 进行刷新,因为它会请求 Web 服务 5 次(每个导航控制器一个)而不是仅刷新对于给定的导航控制器(即由该特定导航控制器管理的视图)。
猜你喜欢
  • 1970-01-01
  • 2012-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多