问题标签 [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 投票
2 回答
1760 浏览

iphone - 严重的应用程序错误

我有一个 TableView 控制器类,它使用获取的结果控制器来显示从核心数据模型中获取的“患者”实体列表。该表的部分取自称为“位置”的患者属性。这是获取请求的排序描述符:

这是 FRC 的初始化代码:

当我想添加一个新的“患者”实体时 - 我单击一个添加按钮,然后将一个“添加新患者”视图控制器推送到导航堆栈。

我添加的第一个病人工作正常。

如果我添加第二个患者 - 应用程序有时会崩溃并出现以下错误:

2010-03-22 14:42:05.270 患者 [1126:207] 严重的应用程序错误。在核心数据更改处理期间捕获到异常:* -[NSCFArray insertObject:atIndex:]:索引 (1) 越界 (1) 与 userInfo (null) 2010-03-22 14:42:05.272 患者 [1126:207] *由于未捕获的异常“NSRangeException”而终止应用程序,原因:“*** -[NSCFArray insertObject:atIndex:]: index (1) beyond bounds (1)”

这似乎只有在患者添加了位置时才会发生(如果没有添加,则位置默认为“未知”)。它似乎也与位置的排序有关。例如,如果第一个患者位置 = 14 号病房,第二个患者位置 = 9 号病房,那么它一定会崩溃。

我想知道这是否与我如何要求获取的结果控制器对部分名称进行排序有关?

这个错误让我发疯,我就是想不通。任何帮助将不胜感激!

0 投票
2 回答
1246 浏览

iphone - 使用 NSFetchedResultsController 按日期(包括 nil)排序

在我的 NSFetchedResultsController 中,我设置了一个基于托管对象的日期属性进行排序的 sortDescriptor。我遇到的问题(连同其他几个根据谷歌)是 nil 值在日期范围的最早端而不是最晚端排序。我希望我的列表最早、更早、现在、稍后、最新、无排序。据我了解,这种排序是在 SQLite 的数据库级别完成的,因此我无法构建自己的 compare: 方法来提供我想要的排序。

我不想在内存中手动排序,因为我将不得不放弃 NSFetchedResultsController 的所有好处。我不能进行复合排序,因为 sectionNameKeyPaths 与日期范围紧密耦合。我可以编写一个重定向 indexPath 请求的例程,以便将结果控制器中的第 0 部分映射到 tableView 的最后一部分,但我担心这会增加很多开销,严重增加我的代码的复杂性,并且非常,非常容易出错。

我正在考虑的最新想法是将所有 nil 日期映射到 NSDate 支持的最远未来日期。我的左脑讨厌这个想法,因为它感觉更像是一个黑客。它还需要一些工作来实现,因为在我的应用程序中处理日期的方式中会大量检查 nil 因素。如果不先检查更好的选择,我不想走这条路。谁能想到一个更好的方法来解决这个问题?

更新

解决此问题的一种可能更好的方法是切换到二进制持久存储。根据我在文档中阅读的内容,排序是在 Objective-C 中使用二进制持久存储完成的,因此我可以为日期排序提供自己的比较方法。我对这种方法有两个担忧。首先,通过迁移到二进制存储,我会看到什么样的性能影响?其次,在应用程序更新中推出这一变化有多难?

0 投票
3 回答
7870 浏览

iphone - NSFetchedResultsController 获取请求 - 更新谓词和 UITableView

在我的 iPhone Core Data 应用程序中,我在主从视图设置中对其进行了配置。

主视图是一个列出List实体对象的 UITableView。TaskList 实体与实体(称为“任务”)具有一对多关系,而任务实体与List称为“列表”具有反对一关系。

List主视图中选择对象时,我希望详细视图(另一个 UITableView)列出与该Task对象对应的List对象。到目前为止我所做的是:

在详细视图控制器中,我为List对象声明了一个属性:

@property (nonatomic, retain) List *list;

然后在主视图控制器中,我使用此表视图委托方法在list选择列表时设置详细视图控制器的属性:

然后,我list在详细视图控制器中覆盖了属性的设置器,如下所示:

我在这里所做的是在获取的结果上设置一个谓词以过滤掉对象,以便我只得到属于所选List对象的那些。详细视图控制器的 fetchedResultsController getter 如下所示:

它与 Core Data 项目模板中的默认值几乎没有变化,我所做的更改是添加一个始终返回 false 的谓词,原因是当没有选择 List 时,我不希望在详细信息中显示任何项目视图(如果选择了列表,则在列表属性的设置器中更改谓词)。

但是,当我选择一个列表项时,什么都没有发生。表格视图中没有任何变化,它保持为空。我确定我的逻辑在几个地方有缺陷,不胜感激

谢谢

0 投票
2 回答
1717 浏览

objective-c - 使用 FetchResultController 和 ManagedObjectContext 获取对象的区别

使用 FetchResultController 或 ManagedObjectContext 从核心数据获取元素有什么区别?

1) FetchResultController

2) ManagedObjectContext

0 投票
3 回答
7524 浏览

iphone - NSFetchRequest / 谓词问题

我有两个实体:Patient 和 Job。Patient 与 Job 的一对多关系称为“jobs”,而 Job 与 Patient 的一对一关系称为“patient”。Job 具有名为“dueDate”(日期)和“完成”(BOOL)的属性,而 Patient 具有属性“firstName”和“lastName”(均为字符串)。

我正在尝试为我的 NSFetchedResultsController 创建一个获取请求/谓词,我们将抓取所有尚未完成的作业(即已完成 == NO)并按患者姓名对其进行分段。这是我的代码:

这是我的 titleForHeaderInSection 方法:

这似乎不起作用。我会以错误的方式解决这个问题吗?

0 投票
1 回答
1702 浏览

iphone - NSFetchedResultsController - 委托方法在 iPhone OS 3.0 下崩溃,但不在 3.1 下

大家好,所以我的 NSFetchedResultsController 在 3.1 SDK 下工作正常,但是我开始遇到一些奇怪的错误,特别是当我在 3.0 下尝试时在委托方法中。我已经确定这与 NSFetchedResultsControllerDelegate 方法有关。这就是我设置的。

inEditingMode 的内容与我实现向表中添加另一个静态部分的方式有关。

当我将实体添加到托管对象上下文时,我收到以下错误:

我在 objc_exception_throw 上放了一个断点,崩溃似乎发生在 controllerDidChangeContent 内部。

如果我注释掉所有 self.tableView 方法,并在 controllerDidChangeContent 中放置一个 [self.tableView reloadData],一切都会按预期工作。

有人知道为什么会这样吗?

0 投票
1 回答
1308 浏览

iphone - NSPredicate 在 NSFetchedResultsController 中表现得很奇怪

我觉得这应该很简单,但它的行为很奇怪。

我有 3 个实体,有这样的关系

实体 A <-->> 实体 B <<--> 实体 C

我有一个 NSFetchedResults 控制器,我正在尝试使用以下谓词过滤实体 A 的结果。

当我尝试运行该应用程序时,输出未显示任何结果。我可以将谓词稍微更改为:

它只向我显示我希望它过滤掉的结果。

为什么会这样?

0 投票
3 回答
1048 浏览

cocoa - 在查找或创建循环期间将数据附加到 NSFetchedResultsController

我有一个由 NSFetchedResultsController 管理的表视图。但是,我遇到了查找或创建操作的问题。当用户点击我的表格视图的底部时,我正在向我的服务器查询另一批内容。如果它在本地缓存中不存在,我们创建它并存储它。但是,如果它确实存在,我想将该数据附加到获取的结果控制器并显示它。我无法完全弄清楚那部分。

到目前为止,这是我正在做的事情:

  1. NSFetchedRequestController 初始化查询数据库中最新的 100 个结果时(使用setFetchLimit:)。即使有 1000 行,我也只希望一开始可以访问 100 行。
  2. 将返回的值数组从我的服务器传递到 NSOperation 进行处理。
  3. 在操作中,创建一个新的托管对象上下文来使用。
  4. 在操作中,我遍历数组并执行获取请求以查看对象是否存在(基于其服务器 id)。
  5. 如果对象不存在,我们创建它并将其插入到操作的托管对象上下文中。
  6. 迭代完成后,我们保存托管对象上下文,这会在我的主线程上触发合并通知。

在合并期间,将步骤 4 中新创建的对象插入到表中,但任何已经存在且刚刚获取的对象都不会插入。这是我的 NSOperation 中的相关代码

我想传递给我的主线程的是新创建的对象以及每次循环迭代时可能在获取请求中获取的任何现有对象。

我觉得这是我所缺少的一些简单的东西,并且可以在正确的方向上使用轻推。

0 投票
1 回答
940 浏览

iphone - iPhone 开发 - CoreData 运行时错误

我正面临一个奇怪的 CoreData 问题。这是日志:

I have a hierarchy of UITableViewControllers that use NSFetchedResultsController to populate the table, and when a particular row is selected, the detail view is shown.

MyMainEntity UITableView 和 MyEntity UITableView 都使用 NSFetchedResultsController 来显示记录。有时它在我滚动 tableView 时崩溃,有时它在我尝试打开详细视图时崩溃。在应用程序崩溃之前,我可以多次导航到 MyEntity 详细信息视图。

这个错误是什么意思?我该如何解决它!?

0 投票
1 回答
763 浏览

ios - 简而言之,NSFetchedResultsController 是如何使用的?

我现在正在阅读文档一小时后,仍然没有理解NSFetchedResultsController. 它是替代品UITableViewController吗?还是UITableViewController使用NSFetchedResultsController? 是NSFetchedResultsController数据源吗?它是什么?