问题标签 [nsfetchrequest]

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 回答
1563 浏览

cocoa - setIncludesSubentities:在 NSFetchRequest 中,跨多个持久存储的实体被破坏

没有完全解决这个问题的现有技术: 核心数据迁移错误消息“'模型不包含配置'XYZ'。'”

我已将其缩小到一个特定问题。不过,设置需要一分钟。请多多包涵。

问题的要点是persistentStoreCoordinator(显然)不能保留对象图的一部分,其中当托管对象存储在不同文件中时,它们被标记为另一个对象的子实体。开始...

1) 我有 2 个 xcdatamodel 文件,每个文件都包含一个实体。在运行时,当构建托管对象模型时,我使用 setSubentities: 手动将一个实体定义为另一个实体的子实体。这是因为尚不支持在编辑器中跨多个文件定义子实体。然后我用 modelByMergingModels 返回完整的模型。

2) 我修改了 persistentStoreCoordinator 方法,以便为每个实体设置不同的存储。从技术上讲,它使用配置,并且每个实体都定义了一个且只有一个配置。

3)我为父实体设置了一个 fetchRequest,其中 setIncludesSubentities: 和 setAffectedStores: 只是为了确保我们同时涵盖了 1) 和 2)。当插入任一实体的对象时,它们都被添加到上下文中,并且它们都由 fetchedResultsController 获取并按预期显示在 tableView 中。

这是它开始行为不端的地方:关闭并重新启动应用程序后,仅获取父实体。

如果我使用 setEntity: 将请求的实体更改为“Note”的实体,则会获取所有注释。如果我将其更改为“浏览器”的实体,则会获取所有浏览器。让我重申一下,在对象首次插入上下文的运行期间,它将出现在列表中。只有在保存并重新启动后,获取请求才无法遍历层次结构。

因此,我只能得出结论,问题在于继承的存储。让我们回顾一下原因:

    - 两个实体都可以创建、插入到上下文中并查看,因此模型正在工作
    - 两个实体都可以通过一个请求获取,因此继承工作正常
    - 我可以确认文件正在单独存储,并且对象正在进入相应的存储区,因此正在保存
    - 使用为请求设置的任一实体启动应用程序都有效,因此从商店中检索工作正常
    - 这也意味着使用请求遍历不同的商店是有效的
    - 通过使用单个商店而不是多个商店,问题完全消失了,因此创建、存储、获取、查看等工作正常。

这只留下了一个罪魁祸首(在我看来):我使用 setSubentities 设置的继承:仅对会话期间创建的对象有效。

要么对象/实体被存储而没有继承信息,要么以编程方式定义的实体继承仅适用于新实例,或两者兼而有之。其中任何一个都是不可接受的。要么它是一个错误,要么我是方式,方式偏离路线。

我已经在这四处走动了两天;非常感谢任何见解。当前的解决方法 - 仅使用单个商店 - 完全有效,但如果我从应用程序中删除其中一个模型等,它不会是面向未来的。它也令人难以置信,因为我不明白为什么你如果核心定义(setSubentities:)不起作用,则将拥有所有这些基础架构,用于跨多个商店进行存储并在获取请求中设置受影响的商店。

0 投票
1 回答
1787 浏览

iphone - 如何获取按计算值排序的托管对象

我正在开发使用 CoreData 的应用程序。存在保存纬度和经度值的位置实体。我想获取那些按到用户位置的距离排序的实体。我试图将排序描述符设置为距离公式 sqrt ((x1 - x2)^2 + (y1 - y2)^2) 但它失败,异常“... keypath ... not found in entity”。

我想获取已经排序的对象,而不是全部获取它们,然后在代码中排序。

任何提示表示赞赏。

0 投票
2 回答
2808 浏览

iphone - iphone coredata 获取请求排序

我正在使用核心数据并成功获取结果。关于核心数据我有几个问题 1. 当我添加一条记录时,它是在实体的末尾添加还是在实体的开头添加。2. 我正在使用以下代码来获取数据。数组正在填充所有记录。但它们与我将记录输入实体的顺序不同。为什么?在什么基础上使用默认排序?

3.我输入记录的方式,1,2,3,4......... 一段时间后,我想删除我最先输入的记录(我是指最旧的数据)。比如删除最旧的两条记录。怎么做?

0 投票
2 回答
2232 浏览

cocoa - 核心数据:试图找到实体中属性的最短日期

我试图在 Core Data 的特定属性中找到最旧的日期。我在 Core Data Programming Guide 中找到了一个示例,声称可以做到这一点,但是当我运行它时不断收到无法识别的选定错误。

我的代码(与 Apple 示例相比只有很小的更改):

和错误:

这很奇怪,因为 1)NSCalendarDate 已被弃用,并且 2)我绝对不会调用 count。

非常感激任何的帮助!

0 投票
5 回答
5149 浏览

iphone - iPhone OS:使用 NSPredicate Nsfetchrequest 和核心数据获取随机实体实例

在我有大量托管对象的应用程序上工作,我想从中获取一些随机实例。

我的问题是,有什么方法可以使用 NSPredicate 和 NSFetchRequest 随机返回多个对象。

我看到您实际上可以使用数据建模器将 NSFetchRequest 添加到实体中,有什么方法可以使用它进行随机提取?

还有什么是确定表格“计数”的最佳方法,这样我就可以设置随机数生成器的界限。

如果您需要更多详细信息,请告诉我。

谢谢!

缺口

0 投票
2 回答
3181 浏览

cocoa - 使用存储在 CoreData 模型中的 FetchRequest 进行变量替换

我总是完全在代码中创建我的 NSFetchRequests。现在我正在查看用于构建获取请求并将其存储在模型中的 Xcode GUI。

我正在遵循 Xcode 文档中的示例。我在模型中添加了一个 Fetch Request,通过 Modeling GUI 创建的谓词是:

然后我用这两行检索该请求:

生成的 NSFetchRequest 的 NSLog 输出以下内容:

.. 这表明在返回存储的 FetchRequest 之前变量没有被替换。

那么,如何指定在 Xcode Data Modeling Fetch Request Predicate Builder GUI 中输入的文本在运行时被 NSFetchRequest:fetchRequestFromTemplateWithName:substitutionVariables: 替换?

谢谢!

伍迪

0 投票
1 回答
1631 浏览

iphone - iPhone:获取谓词对象的 indexPath

我正在使用谓词在核心数据中查找对象。我可以成功找到我想要的对象,但我还需要获取该对象的 indexPath,以便我可以推送该对象的详细信息视图。目前我有以下代码来获取我的对象:

所以,我可以正确地将我的对象放入一个数组中。 但是如何将该对象转换为 indexPath?

0 投票
1 回答
1817 浏览

core-data - 核心数据和分页

我有一个包含 50,000 条记录的数据库。我正在使用核心数据从搜索中获取记录。一次搜索可以轻松返回 1000 条记录。使用核心数据和 uitableview 对这些记录进行分页需要什么?我想一次显示 100 条记录,并在查看 100 条记录后有“加载更多”按钮。

0 投票
2 回答
683 浏览

core-data - 当我尝试设置关系时,为什么 CoreData 会因“无法识别的选择器”而崩溃?

我在一个名为“Item”的 CoreData 实体中有简单的树结构。

任何项目都可以是另一个项目的父项,并且可以有多个子项。

实体中有以下关系:

childItems:To-Many,目的地:Item,逆:parentItem。可选的 parentItem:目标:项目,反向:childItems。可选的

我正在使用 Xcode 生成的以下 Item.h :

获取请求非常简单:

当我尝试设置关系时,它只会崩溃。为什么?

调试输出:

我可以设置或获取其他属性就好了。但是当我试图改变关系时它崩溃了。我究竟做错了什么?

0 投票
2 回答
3715 浏览

iphone - 更改为 NSFetchedResultsController 后 UITableView 未更新 DataSource

我有一个UITableViewNSFetchedResultsController. 初始提取工作正常。我可以零问题地添加、删除、修改等。但我想将用户定义的排序添加到表中。我通过更改NSFetchedResultsController使用不同的sortDescriptor集合和不同的sectionNameKeyPath. 这是我更改提取的代码:

当我调用此方法时,效果很好。该表立即重新排序以使用新的部分信息和新的排序参数。但是,如果我向数据添加或删除项目,TableView 不会更新其信息,从而导致崩溃。我可以 NSLog 获取 fetchedResultsController 中的对象总数的计数,并看到它增加(和减少),但如果我 NSLog 返回值numberOfRowsInSection以监视那里的变化,则调用该方法,但值不会改变。得到以下崩溃(用于添加,但删除类似)

无效更新:第 2 节中的行数无效。更新后现有节中包含的行数 (3) 必须等于更新前该节中包含的行数 (3),加上或减去数字从该部分插入或删除的行数(插入 1 行,删除 0 行)。与用户信息(空)

如果我重新启动应用程序,我会看到添加的项目,或者看不到删除的项目,因此我正在正确修改数据源。

有任何想法吗?