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

iphone - 如何从 Core Data 中的关系相关实体获取属性?

我对 ObjC 有经验,但对 Core Data 来说相对较新。到目前为止,这一直很简单,但我有点受不了人际关系,所以我希望有人能指出我正确的方向。

我有两个实体:一个是人员列表,另一个是事件列表。

我在两个实体之间的数据模型中建立了反向关系(称为“人”),“人”端设置为“对多”。换句话说,我可以有 5 个人但有数千个事件;每个事件都与一个人相关联,但一个人可以负责任意数量的事件。

我使用 [NSEntityDescription insertNewObjectForEntityForName...] 添加事件,然后使用 NSFetchedResultsController 检索它们。

问题是在获取特定事件对象时,我还没有成功地检索到一个人的数据。例子:

我错过了什么?我如何获取关系中的人的数据?我有一种感觉,我在首先添加日志条目时遗漏了一个重要链接,或者在检索日志条目时可能是一个必要的谓词。在关系和具体示例方面,Apple 的文档有点少。我可能仍然对老式 SQL 感到困惑,所以我真的可以使用一些帮助。谢谢!

0 投票
1 回答
1163 浏览

iphone - NSFetchRequest 导致 SIGABRT 或 EXC_BAD_ACCESS

我正在为我的获取请求使用这个简单的代码

NSLog(@" i want show my result : %@",fetchResults);-> 导致 SIGABRT

如果我在创建后就在我的持久存储上使用,我有一个错误。

PS:商店在填充和请求之间保存。

但是如果我关闭应用程序并重新打开(在这种情况下商店存在),我没有错误。

在某些情况下,我可以查看此消息:在抛出“NSException”实例后调用终止

但我无法访问此异常。

如果我计算获取结果,我有一个很好的数字,这真的很奇怪。

感谢帮助。

0 投票
1 回答
162 浏览

iphone - 使用 Core Data 获取大量对象,后果是什么?

执行NSFetchRequest检索大量对象(可能在 3 ~ 5K 左右)是否会受到伤害?我了解 Core Data 使用一种称为“故障”的东西来确保对象在实际需要之前不在内存中。因此,如果我在 NSArray 中获取 5K 对象,这意味着这些对象实际上只是占位符,直到我真正访问它们的属性?这是一个不好的做法吗?

0 投票
5 回答
2268 浏览

objective-c - 带有 NSPredicate 的 NSFetchRequest 有时会抛出 NSInvalidArgumentException

这个让我莫名其妙:

我有一个核心数据集,我使用以下代码搜索/过滤:

sTerm 只是一个NSString.

这在 95% 的时间里都有效,但是每隔一段时间它就会捕获一个NSInvalidArgumentException: Can't use in/contains operator with collection 10076173 (not a collection).

谓词字符串格式如下:

((isLocalVersion == 1) AND (LeadStatusID =='Active')) AND ((LeadID contains[cd] 'i')OR (AccountNumber contains[cd] 'i')OR (ANY contactItems.FirstName contains[cd] 'i')OR (ANY contactItems.LastName contains[cd] 'i')OR (ANY addressItems.Address1 contains[cd] 'i')OR (ANY addressItems.City contains[cd] 'i'))

我的捕获让我不会崩溃,只返回 0 个结果,但这不是最佳的。有没有人见过这个?

我唯一的线索是,它似乎发生在我修改(并保存)核心数据中的记录之后(再次只是有时)。

0 投票
1 回答
3587 浏览

iphone - 使用一对多关系按依赖属性对 NSFetchRequest 进行排序

会感谢一些指导,因为我对核心数据问题有点不了解。我想创建一个带有 NSSortDescriptor 的 NSFetchRequest ,它使用基于一对多关系的依赖属性。

对于苹果来说,文档说你不能这样做。让我感到困惑的是,只有当我将它用作 NSSortDescriptor 的一部分时,它才不起作用。在请求的 NSPredicate 和我的 ManagedObject 子类中它可以工作。

简而言之,我有一个简单的对象模型,它包含一个可以有许多 Checkin 对象的 Venue 对象。每个 Checkin 对象都有一个名为 hereNow 的属性。

到现在为止还挺好。这是来自 TableView 控制器的 fetchRequest

使用该代码,我收到以下错误

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“包含 KVC 聚合的密钥路径不应存在;无法处理签到。@sum.hereNow'

但是对于 MapView 控制器,我有一个类似的 fetchRequest,它工作得很好(我只是将 NSSortDecriptor 设置为使用名称字段)。如果我对 TableView fetchRequest 执行相同操作,那也可以,并且在添加新的签入对象时,地点计数似乎会正确更新。所以在谓词中使用那个keyPath似乎没有问题,只是sortDecriptor。

然而,苹果的文档是这样说的;-

您不能设置对多对关系的依赖关系。例如,假设您有一个 Order 对象,它与 OrderItem 对象的集合具有一对多关系 (orderItems),并且 OrderItem 对象具有 price 属性。您可能希望 Order 对象有一个 totalPrice 属性,该属性取决于关系中所有 OrderItem 对象的价格。您不能通过实现 keyPathsForValuesAffectingValueForKey: 并返回 orderItems.price 作为 totalPrice 的键路径来做到这一点。您必须观察 orderItems 集合中每个 OrderItem 对象的价格属性,并通过自己更新 totalPrice 来响应其值的变化。

这似乎很清楚,但我不明白为什么我可以在谓词中做同样的事情?这是我的第一个核心数据应用程序,所以我对它有点陌生。我已经阅读了几个关于 KVO、KVC 等的问题,但我并没有真正掌握这些问题。正如你所看到的,我真正想做的只是根据他们派生的总“hereNow”计数对一组场地进行排序。也许我正在以完全错误的方式解决这个问题?如果是这样,将不胜感激朝着正确的方向友好引导!

0 投票
1 回答
237 浏览

iphone - 如何在核心数据中以一对多关系链接现有值?

我正在尝试将已经在类别中的值链接到 wod 实体。因为我确实想为每个类别的 wod 记录调用一个新记录。不知道该怎么做。我正在考虑使用谓词,但我不确定如何将它从获取请求中链接。

这就是我的架构的样子:

在此处输入图像描述

这是尝试将它们链接在一起的代码:

任何帮助将不胜感激。

0 投票
1 回答
1042 浏览

objective-c - 在 NSFetchRequest 中按实体名称排序

我有一个获取的结果控制器,它应该显示具有多个子实体的某个实体的所有项目。

获取结果控制器中的部分应基于实体名称,即项目所属的子实体。设置sectionNameKeyPath@"entity.name"工作。

然而,似乎不可能为获取请求获取正确的排序描述符。诸如此类的事情[NSSortDescriptor sortDescriptorWithKey:@"entity.name" ascending:YES]会导致诸如keypath entity.name not found in entity Something.

0 投票
1 回答
426 浏览

objective-c - 根据关系表从父表中获取记录 - CoreData

对不起,如果标题没有任何意义。

让我进一步解释一下。

我有这个 CoreData 应用程序,我在 CoreData 中相对较新。我有两张桌子。一个是预算,一个是支出。所以预算表有一个名为 TotalBudget 的字段。现在,我在支出表中有不同的行,用户在一段时间内输入了这些行,并且该表有一个名为“个人支出”的字段。

现在我希望做的是只获得那些个人支出总和小于 TotalBudget(预算表)的预算。在 SQL 语言中,它会像下面这样

Select BudgetName From Budget Where TotalBudget < (Select Sum(IndividualBudget) From Spend Where BudgetID = Budget.BudgetID)

我怎样才能在核心数据中实现这一点?我有从一个表中检索数据的代码,我可以使用 NSPredicate 来过滤基于 BudgetStartDate 和 BudgetEndDate 的记录,但我怎样才能实现这样的目标。

谢谢

0 投票
2 回答
570 浏览

ios - 任何人都知道如何使表索引成为我的核心数据名称属性的前 4 个字符?

我正在开发一个硬币应用程序。硬币在由 Core Data 管理的表格视图中呈现给用户。

所有硬币名称都以“19”或“20”开头。当我在表视图上实现部分索引时,我的索引中只得到一个“1”和一个“2”。按“1”将桌子移动到“1900”硬币,按“2”将我带到“2000”硬币。我知道为什么会这样,它来自名称字段中的第一个数字。

我想要的是“1910”、“1920”、“1930”等,所以用户可以跳转到十年。

我在模型中添加了一个名为“titleForSection”的属性,并输入了“1910”、“1920”等,并在我的获取请求中将 sectionNameKeyPath 设置为我的@“titleForSection”属性。不用说,它不起作用。

任何人都知道如何使部分索引名称属性的前 4 位?

更新:

我将“titleForSection”属性从字符串更改为数字,然后将数据库从 1900 年一直填充到 2010 年,以十年为单位。现在我的表索引只显示“0”、“1”和“2”。我只是不明白为什么我不能在那里输入一个数字!

0 投票
1 回答
2166 浏览

xcode - NSFetchedResultsController 部分索引将转到错误的行

我有一个带有部分的 FRC。我已经实现了部分索引(就像在它工作的其他 6 个视图中一样),它显示了;但是,当我点击其中一个索引时,它会转到中间并停止。我的 FRC 和 sectionIndex 方法如下。

我在调试器中单步执行了代码,sectionForSectionIndexTitle 返回了正确的索引(如果重要,则为 15),但它只是停在“I”处。

有任何想法吗?

编辑: