问题标签 [nsfetchedresultscontroller]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
7397 浏览

ios - 使用 NSFetchedResultsController 创建表部分

NSFetchedResultsController用来驱动我的数据UITableViewController。我正在获取的托管对象的简化版本如下所示(例如):

基本上,我希望我的表格只显示那些Person有宠物的对象。所以这很简单,我可以使用谓词。现在,对于那些hasPet == YES,我想将它们分成 2 个部分放在表中,第一个部分hasDog == YES是 ,第二个是hasDog == NO。这是我有点模糊的地方。这是我配置结果控制器的地方,希望有人可以帮助我朝着正确的方向前进。

排序描述符是我需要集中注意力的地方吗?

0 投票
2 回答
5208 浏览

iphone - NSFetchedResultsControllerDelegate 未触发

我无法弄清楚为什么在我将数据添加到底层数据存储时,NSFetchedResultsControllerDelegate 方法没有触发。如果我重新启动 iPhone 应用程序,数据会立即显示。

我继承了 UITableViewController 并符合 NSFetchedResultsControllerDelegate:

我实例化 NSFetchedResultsController 并将委托设置为 self:

我实现了委托方法:

我创建了我希望保存的实体:

后来,我保存它:

除了我的委托方法没有触发之外,这一切都很好。显然我的表格视图没有更新,查看新数据的唯一方法是显式刷新或重新启动应用程序。

我浏览了 CoreData Recipe 应用程序 - 但似乎找不到我缺少的东西。想法?

——路德

0 投票
4 回答
4086 浏览

iphone - NSFetchedResultsControllerDelegate 'ChangeUpdate' 行为是否被破坏?

NSFetchedResultsControllerDelegate 的文档提供了以下示例代码

当我创建一个新的 NSManagedObject 时,NSFetchedResultsChangeInsert触发(太棒了!)。当我更改属性的值(用于单元格的标题)时,NSFetchedResultsChangeUpdate会触发。不幸的是,除非我重新加载表格、部分或行,否则新标题不会自动显示。实际上,如果新名称导致结果集以不同的方式排序,则NSFetchedResultsChangeMove会触发并且一切正常,因为提供的代码会重新加载整个部分。

UITableView 有一个方法reloadRowsAtIndexPaths:withRowAnimation所以我尝试在 NSFetchedResultsChangeUpdate 代码块下使用。它确实有效......但是这个特定方法的文档读起来好像我不需要它(注意最后一行):

重新加载一行会导致表视图向其数据源询问该行的新单元格。该表在为旧行设置动画时为该新单元格设置动画。如果要提醒用户单元格的值正在更改,请调用此方法。但是,如果通知用户并不重要——也就是说,您只想更改单元格显示的值——您可以获取特定行的单元格并设置其新值。

是的,如果我记录正在发生的事情,什么时候

在NSFetchedResultsChangeUpdate上调用,它能够检索最新的“名称”值并将其设置在单元格的 textLabel 中。除非我重新加载,否则该名称不会在单元格中呈现。即使我只是单击单元格,也会显示名称。请注意,要重新创建此行为,您必须创建一个新的托管对象,然后为其命名,使其在 NSFetchedResultsController 中排序为 FIRST。这样, NSFetchedResultsChangeMove 就不会触发(它确实有效,因为它重新加载了该部分)。

我错过了什么还是这是预期的行为?reloadRowsAtIndexPaths的“讨论”让我相信我应该能够简单地设置单元格的 textLabel 而无需重新加载行、节或表。

0 投票
3 回答
337 浏览

iphone - 在获取请求中不包括临时对象

我有一个处理表视图的获取结果控制器,我遇到了一个问题,它还显示了已在上下文中创建但未保存到商店的新托管对象。我只想列出已保存的对象。

我尝试在获取请求中将 setIncludesPendingChanges 设置为 NO,但它不起作用!

任何建议将不胜感激!

谢谢,

麦克风

0 投票
1 回答
1074 浏览

iphone - iphone fetchRequest 子实体?

如果我从“父级”获取数据并将其分配给 fetchresultscontroller,我仍然需要调用

在我的 cellForRowAtIndexPath 中获取子数据。这是正常的事情吗,还是我可以在我的 fetchedresultscontroller 中从孩子那里获取真实数据?

0 投票
1 回答
736 浏览

iphone - 如何观察托管对象上下文

每当我在应用程序的第一个选项卡中更改对象时,更新都会在选项卡 2 中自动更新,因为它使用了 fetchedResultsController。现在我有第三个标签也应该更新自己,但我该怎么做呢?

我在第三个选项卡中只有一个 nsmangedObjectContext 来获取适当的数据。每当此上下文中的对象发生更改时,我如何接收通知?

我也在努力解决如何让我的数据获取更有效的问题,因为选项卡 2 和 3 使用相同的数据集。我目前正在选项卡 3 中进行另一次提取,以获取与选项卡 2 相同的数据。我不知道如何在不干扰 fetchedresultscontroller 的情况下使用来自 tab2 的数据。

有关此主题的信息将不胜感激!

0 投票
1 回答
237 浏览

ios - tableView 和普通视图(相同的数据对象)

我不知道如何在两个标签栏项目之间共享相同的数据。一个选项卡使用 nsfetchedresultscontroller,另一个表只是一个普通视图,应该使用与我的 fetchedresultscontroller 相同的数据。

如果我有两个法线视图,我只会让我的对象成为单例,并让表格视图和普通视图使用相同的数据。

但现在我有一个 fetchresultscontroller 和一个正常的视图。我正在考虑只为我的普通视图使用另一个 fetchedresultscontroller,所以我拥有所有功能,例如获取缓存、通知等。

我知道 fetchresultscontroller 应该用于 tableview,但我想我也可以将它用于非 tableview。

有人知道我应该怎么做吗?我找不到苹果关于这件事的文档。

0 投票
1 回答
1819 浏览

iphone - NSFetchedResultsController 崩溃

以下步骤会导致 NSFetchedResultsController 崩溃。

  1. 我尝试将第一个元素添加到 NSFetchedResultsController 支持的 TableView。
  2. 我创建了一个临时 MO 对象并显示一个模态视图窗格以添加新对象。
  3. 在添加工作表(模态视图控制器)上,我按下取消按钮以丢弃新元素。
  4. 在取消按钮的 CancelAction 回调中,我删除了我创建的新临时对象。
  5. 此处的代码与 Apple 的 Core Data 示例代码完全相同。我唯一的额外代码是在 Add 工作表被解除后调用 [tableView reloadData] 。
  6. 只有当我尝试添加第一个元素时才会导致崩溃,因为它与 NSFetchedResultsController 中的错误部分计数有关。

这会导致下面给出的崩溃。如果我删除对 reloadData 的冗余调用,则崩溃是不可见的。如果我将 reloadData 调用添加到 Recipe 示例代码数据,崩溃也会发生在那里。

NSFetchedResultsController 是否存在已知问题?

2009-09-13 18:22:45.600 食谱 [14926:20b] * 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“* -[NSCFArray objectAtIndex:]: index (0) beyond bounds (0)”

0 投票
2 回答
24721 浏览

objective-c - 带搜索的 NSFetchedResultsController

过滤数据的最佳做法是什么NSFetchedResultsController?每次搜索栏的文本更改时,我是否需要重新初始化它?

我正在使用一个UISearchDisplayControllers并且我正在实施:

谢谢。

0 投票
6 回答
27020 浏览

iphone - 非法尝试在不同上下文中的对象之间建立关系“xyz”

我使用 Apple 的CoreDataBooks示例应用程序作为在后台将数据拉入辅助托管对象上下文的基础,然后将该数据合并到主要托管对象上下文中。

我要提取的数据是与实体(称为“所有者”)Book具有一对一关系的实体。Owner实体与(称为“书籍”)Owner具有一对多关系。Book

我的数据是以下形式的 XML 文档:

Book OnethroughBook N与一个Owner( "alexpreynolds, 123456") 相关联。

我将其解析为一个Owner实例和一个NSMutableSet由实例组成的Book实例。

当我第一次尝试保存时,它保存得很好,合并的数据显示在表格视图中。

然而,在第二次保存时,当 XML 内容包含一本新书时,它就不起作用了。

这是发生的事情:

然后我尝试加载一个 XML 文档,该文档包含一个Book尚未在主托管对象上下文中的新对象。新Book的使用与其他sOwner关联的相同。Book

我有一些例程可以挑选出这个唯一的Owner托管对象(我已经在我的主托管对象上下文中拥有)和在主 MOC 中找不到Book唯一对象。

由此,我Book在辅助 MOC 中创建了一个新对象,并将其“ owner”关系设置为指向Owner我在主 MOC 中找到的唯一对象。

当我保存时,我收到以下错误:

如何Book在辅助 MOC 中创建一个新实体,以便我仍然可以将它与Owner主 MOC 中预先存在的实体相关联?