【问题标题】:Sharing UICollectionView data from 3 view controllers using MVC iOS使用 MVC iOS 从 3 个视图控制器共享 UICollectionView 数据
【发布时间】:2016-11-13 09:02:32
【问题描述】:

这是场景。我正在开发一个应用程序,其中有 3 个视图控制器(比如“child1”、“child2”、“child3”),每个控制器都有一个 collectionView。现在它们都具有相同的功能。唯一的区别是数据来自 3 个不同的 API。现在我创建了一个父视图控制器(比如“ParentVC”)并且所有三个视图控制器都继承了“ParentVC”。

现在假设我到达“child1”,API 命中并且 collectionView 被重新加载。 现在我推送“child2”,API 命中并重新加载 collectionView。 “child3”也是如此。

现在当我弹出“child3”时,“child2”上的 API 应该不会再次命中。 当我弹出“child2”时也会出现类似的情况。

现在我已经做到了,但问题就在这里。

问题:

我正在尝试使用 MVC 模式,并且我有一个单独的数据模型类,它从 API 获取数据。现在如何在这种情况下使用 MVC,因为每次在视图控制器之间切换时都需要更新数据模型因此需要重新加载操作?

【问题讨论】:

  • 发布一些你之前尝试过的代码?这将有助于了解您的情况和问题..

标签: ios model-view-controller uicollectionview


【解决方案1】:

您有两种选择来解决您的问题

1- 尝试在 viewWillAppear 而不是 viewDidLoad 中调用您的 API。

2- 如果您使用的是 MVC,那么您还需要在模型类中实现两个额外的方法,称为 encodeWithCoderinitWithCoder,并在从 API 获得响应后保存您的模型使用以下代码在 NSUSerDefaults 中的 objects Array 或 Dictionary

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; NSData *myEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:object]; [prefs setObject:myEncodedObject forKey:key]; [[NSUserDefaults standardUserDefaults] synchronize];

并使用下面的代码获取保存的对象。

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; NSData *myEncodedObject = [prefs objectForKey:key ]; id obj = [NSKeyedUnarchiver unarchiveObjectWithData: myEncodedObject];

【讨论】:

  • 我只有一个模型类。
  • 那么您应该为每个 API 数据采用该模型的不同对象。并将上面提到的编码和解码方法放在你的模型类中。
  • 这就是我正在做的。但我不想每次访问视图控制器时都访问 API
  • 然后使用第二个选项。
猜你喜欢
  • 2023-03-13
  • 1970-01-01
  • 2011-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多