【问题标题】:Dynamically change fetchedResultsController动态改变 fetchedResultsController
【发布时间】:2015-07-09 21:15:38
【问题描述】:

我遇到了一个问题:在我的项目中,我使用 Core Data 来管理数据。我在所有项目中都使用了一个 fetchResultsController

AppDelegate.m 中,我执行了一个获取请求,一切正常。数据显示在 2 个 tableView 中:AllRecipesFavouriteRecipes。我需要以某种方式获取 AllRecipesViewController 中的所有食谱,并且只获取最喜欢的食谱 FavouriteRecipesViewController

我在 FavouriteRecipesViewController viewDidAppear 方法中设置了一个谓词来仅获取最喜欢的食谱,并在 AllRecipesViewController 中设置了一个谓词来获取所有食谱。 但我不确定这样做是否可行。

谁能告诉我一个更好的方法?

【问题讨论】:

  • 为什么只有一个 FRC?为什么不让每个视图控制器都有自己的呢?您在应用程序委托中执行 fetch 的目的是什么?
  • I app delegate 我加载了所有可以通过 FavouriteRecipesTableViewController 和 AllRecipesTableViewController 访问的食谱。这些配方可以在另一个视图控制器中更新和删除。此外,还有一个用于添加新配方的 viewController。而且我使用单个 FRC 只是为了确保每次更改后都会更新信息。我在考虑每个 viewController 都有自己的 FRC,但我不知道如何让 tableViews 知道数据的所有变化。而且我是新手=)

标签: ios objective-c core-data nspredicate nsfetchedresultscontroller


【解决方案1】:

你可以做两件事:

  1. 为每个视图设置一个单独的NSFetchedResultsController,并在新的UIViewController 被实例化时进行获取(我会这样做)。
  2. 更新NSFetchedResultsController 上的谓词并每次重新获取 你去一个新的UIViewController(我不会做)。

【讨论】:

  • 我不太喜欢我在项目中使用的第二个变体,但我不明白如果我使用单独的 FRC,我的 tableViewControllers 将如何知道数据的变化并重建表格跨度>
  • 如果在实例化 UIViewController 时创建了单独的 FRC(在 viewDidLoad 中),那么每次导航到该视图时,它都会获取最新数据。所以让我们在所有食谱中说你的,并添加一个作为你的最爱。所以你更新NSManagedObject 并保存上下文。现在,当您导航到另一个 UIViewController 并从后备存储中获取时,您将获取最新信息。
  • 另外请注意,一般情况下,您只需在创建 FRC 或更新其获取请求时显式地获取它。它的全部意义在于观察核心数据中的新/更改/删除对象。
  • 抱歉,第二种方法会不会严重影响应用程序性能?
  • 不一定。这实际上取决于您获取的数据量。如果您获取 10 ^ 5 条记录,那么可以,但如果它只有几百条就可以了。使用选项 1 的好处是您可以为每个相应的 FRC 实现缓存。当您推送到您已经去过的 VC 时,当您创建 FRC 时,您可以从缓存中获取。在选项 2 中,您不能这样做。
猜你喜欢
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多