Iphone Objective-C中的代表和通知

Iphone Objective-C中的代表和通知,iphone,objective-c,ios,ipad,delegates,Iphone,Objective C,Ios,Ipad,Delegates,在AppDelegate中,我从JSON提要下载一些数据。我正在下载几个频道的now/next/later节目表。我有三个不同的视图控制器,分别用于“现在”、“下一个”和“以后”。在每个视图控制器中,用户可以添加/删除频道,因此,当发生这种情况时,必须再次下载新添加的频道数据 由于数据下载到AppDelegate中并存储在那里,我如何将其传递给三个视图控制器?我应该执行三个单独的代表吗?请记住,在添加新频道时,必须再次下载其数据(我现在在AppDelegate外部执行此操作) 需要帮忙吗 谢谢这

在AppDelegate中,我从JSON提要下载一些数据。我正在下载几个频道的now/next/later节目表。我有三个不同的视图控制器,分别用于“现在”、“下一个”和“以后”。在每个视图控制器中,用户可以添加/删除频道,因此,当发生这种情况时,必须再次下载新添加的频道数据

由于数据下载到AppDelegate中并存储在那里,我如何将其传递给三个视图控制器?我应该执行三个单独的代表吗?请记住,在添加新频道时,必须再次下载其数据(我现在在AppDelegate外部执行此操作)

需要帮忙吗


谢谢

这基本上是一个风格问题,你的方法本身并不是无效的

不过,我会用另一种方式来实现它——AppDelegate并不意味着要用作工作马,同时拥有多个AppDelegate是不可能的

以下是关于如何做到这一点的一些想法(尽管这当然不是唯一正确的方法):

  • 首先,我会使用核心数据或其他类型的存储,可以从应用程序中的任何位置获得
  • 然后我可能会介绍一些“数据控制器”类(可能是单例)。此类应处理数据下载以及根据请求将数据分发到ViewController
  • 通过使用一个中央控制器,您可以确保数据只下载一次,因为控制器确切地知道哪些数据已经在库存中
  • 您的ViewController将不再负责管理下载,也不会自己访问磁盘上的数据。他们只需向您的数据控制器发出请求,并在请求的数据可用时获得回调—无论该数据是否已在磁盘上或已下载
  • 这将使您的VCs保持苗条和专注,并减少更改界面的痛苦
      烤面包师的回答是正确的,正如他所说,有几种方法可以做到这一点。一种是调用数据访问类并更改值或侦听值的更改。对于后者,报告说:

      KVO对于模型和模型之间的通信特别有用 应用程序中的控制器层

      • 控制器对象通常观察模型的属性 对象,视图对象观察模型对象的特性 通过控制器
      • 但是,除此之外,模型对象还可以观察其他模型对象 对象(通常用于确定从属值何时更改)甚至 自身(再次确定从属值何时更改)

      另一个是使依赖项显式,可能传递保存在应用程序委托中的数据访问类。瞧。

      我想我会同意你的做法。我不需要核心数据,因为在每次发射时,该特定数据集都会刷新。还有一个问题,我应该在singleton类中实现数据请求连接和下载,还是使用singleton类作为下载数据的存储?什么更好?我会说是的,我也会在数据控制器中实现它。可能有一些原因,我不能看到,如果不知道你的项目更详细,虽然,这将使我决定否则。但在任何情况下,我都不会把管理下载的负担强加给ViewController。如果您喜欢将任务严格分开,最好有一个下载控制器与数据控制器一起使用。但是,这也是一个风格和可维护性的问题。这两种方法可能同样有效。