问题标签 [fetched-property]
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.
iphone - Core Data 获取值的总和。获取的属性与传播
我对 Core Data 比较陌生(来自 SQLite 背景)。刚读完“iOS 核心数据”一书,但当我开始为具有以下模型的应用程序建模时,我留下了许多令人费解的问题:
- 具有一对多“交易”关系和“起始余额”属性的“帐户”实体
- 具有一对多“付款”关系的“交易”实体(与帐户相反)
- “付款”实体,包含实际支付的“金额”的详细信息
出于性能原因,我想对模型进行非规范化并在“Accounts”实体中添加一个“TotalAmountSpent”属性(如书中建议的那样),以便在发生变化时继续更新它。
在实践中,这似乎很难通过 Core Data 实现。我不知道如何正确地做到这一点(也不知道正确的方法是什么)。所以我的问题是:
a) 我应该将“TotalAmountSpent”更改为 Fetched 属性吗?是否存在性能影响(我知道它是延迟加载的,但我几乎肯定会为每个帐户获取该属性)。如果我这样做,我需要能够获得在给定时间段(例如过去三天)内针对“startingBalance”所花费的总金额。这在 SQL 中似乎很容易,但我如何在 Core Data 中做到这一点?我读到我可以使用@sum 聚合函数,但是如何使用@sum 过滤“日期”?我还阅读了数据中的任何更改都需要刷新获取的属性。我如何“倾听”变化?我是否在“付款”实体的“willSave”方法中执行此操作?
b) 每次将新付款添加到交易中时,我是否应该使用传播并手动更新“TotalAmountSpent”?最好的地方是什么?我应该在重写的 NSManagedObject 的“willSave”方法中执行此操作吗?如果帐户上的“startingBalance”字段已更新,我担心更新所有相应的交易/付款将是一场噩梦。然后,我必须加载每笔付款并计算支出总额和帐户的最终余额。如果有成千上万的付款,那就太可怕了
任何有关此事的指导将不胜感激。谢谢!
core-data - xCode 4.2 核心数据如何在数据模型编辑器中使用 GUI 创建获取的属性?
我对核心数据编程很陌生。我知道实体是表,我想做以下事情:
一个表“记录”在另一个表(“事件”)中有一个属性“recordID”我有一系列与此记录相关的事件,它们也都有一个属性“recordID”。“记录”表中有一个条目与这些表之间的许多“事件”关系,通过“记录ID”链接。
我想知道如何使用数据模型编辑器中的 GUI“Fetched Properties”来检索记录的当前 recordID 的“事件”数组。
我检查了谓词编程指南,它提到我可以做这样的事情:
所以在GUI中,我正在考虑使用
如何区分不同的表?我说 self.recordID = recordID 还是什么?
编辑:除非我完全误解了这些关系的用途。关系会自动为我链接表吗?
sorting - Core Data 后台排序
我有一个与Department
实体具有一对多关系的Employee
实体。在运行时,对于每个Department
对象,我想维护一个排序的Employee
对象数组(根据某些属性排序),它将用作各种视图对象中的模型。
从我读到的有两种方法来表示排序数组:
Rep1:定义一个获取的属性Department
(排序由Core Data完成);
Rep2:在 Department中维护一个实例变量sortedEmployees
(对象)(排序由我的代码完成)。NSArray
Employee
现在我真正的问题是,当应用程序启动时,我有大量的Departments
和Employees
要从持久存储中获取。我想在后台执行排序,以免阻塞 UI。
我尝试了几种方法,但最终都徒劳无功:
Method1(使用Rep1):在后台线程中(使用 an NSOperationQueue
),获取所有Departments
,然后执行每个获取的属性。Department
然后回到主线程,在主线程的托管对象上下文 ( MOC ) 中找到相应的对象(通过NSManagedObjectID)并使用 fetched 属性。Method1的问题:即使后台Department的fetch完成后,主线程Department对象中的fetched属性也没有填充,这意味着它在主线程Department中重新获取!这违背了后台获取的全部目的。假设所有 MOC 中都存在已获取的属性,我是否错了?
Method2(使用Rep2):在后台线程中(使用 an NSOperationQueue
),获取所有Departments
,然后计算每个人的sortedEmployees
数组。然后回到主线程,在主线程的MOC中找到对应的 Department 对象(通过NSManagedObjectID)并将前面提到的数组设置为这个对象。Method2 的问题:sortedEmployees
数组中的Employee
对象是属于后台线程的MOC的对象。当主线程稍后尝试访问它们时,会发生类似这样的崩溃,"NSManagedObject with ID ... has been invalidated."
这是因为每个线程都必须有自己的 MOC(及其关联的托管对象)。
那么,如果托管对象不能跨线程边界存在,那么如何在后台对托管对象进行排序呢?我错过了什么吗?
ios - iOS 核心数据中的 i18n
我正在为 iOS 开发本地化架构。我有不同的实体可以具有翻译字段,因此我为每个实体创建一个翻译实体。两个实体之间始终存在一对多的关系,允许我在未来添加新的语言,并且我可以通过Entity.translations访问翻译。到目前为止,一切都很好。
1)首先,我想知道这样的方法是否听起来不错。是我将在纯 SQL 环境中使用的解决方案,所以我想我可以遵循这条路径。
2)然后...我只想用于Entity.text
为用户显示适当的文本(通过NSLocale preferredLanguages
)。作为translations
返回的NSSet
一个选项将是手动将属性添加到实体模型,并更改 getter:
它有效,但它有意义吗?我会遇到性能问题吗?是否可以使用Fetched 属性做类似的事情?有些东西告诉我这应该是可能的,但我无法使用 Xcode Core Data 编辑器让它工作......
谢谢。
ios - 核心数据中的 Fetched Property 返回不正确的计数
我有一个看起来像这样的核心数据关系
项目A ->> 项目B
其中 itemA 有很多 itemB。我想使用一个获取的属性,该属性允许我获取与 itemA 关联的所有关联 itemB,这些 itemA 的 int32 状态属性设置为“2”。所以我在数据建模器中创建了一个获取的属性,它具有以下内容:
获取的属性:completedItem 谓词:状态 == 2 目的地:itemB
当我第一次尝试时,我拿回了物品,我认为这一切都很酷并且完成了,然后我注意到奇怪的行为,当我仔细观察时,它返回的物品与相关的 itemB 的实际数量无关一个 itemA 对象。更奇怪的是返回类型是 NSFaultingMutableArray。这是一个简单的例子
- ItemA 有 0 个 itemB
- 对 ItemB 的 NSSet 属性 ItemA 的过滤谓词搜索返回 0
- 获取的属性“completedItem”返回 4 的 ItemB
- 它返回的类型是 NSFaultingMutableArray
现在这在我的脑海里很奇怪,而且真的没有意义。有任何想法吗?
更新 1:
似乎此处列出的 fetched 属性获取了核心数据必须提供的与谓词匹配的所有ItemB 对象,即使它与相关的 ItemA 没有关联
core-data - 使用 Xcode 4.2.1 核心数据模型编辑器,如何为获取的属性更新谓词?
在 Xcode 4.2.1 中使用 Core Data Model Editor 编辑谓词时,如何保存更新的谓词?更改谓词的值似乎不会持续存在。原始谓词仍然适用于获取的属性。
重现步骤:
- 创建一个获取的属性(例如,实体书上的奇数页与相关实体页)
- 将谓词设置为 book == $FETCH_SOURCE && isEven != 0。
(Book 实体应该与 Page 实体有关系,比如说它名为“pages”。Page 实体应该与名为“book”的 Book 实体有反向关系. Page 实体还有一个属性 pageNumber 和一个属性 isEven,是在根据 pageNumber 创建页面时设置的,这一步中谓词的逻辑故意不正确。) - 构建、运行和停止。现在更正谓词以反映“isEven == 0”。
- 再次构建并运行。请注意,为 fetched 属性提取的结果来自原始谓词。
这是一个错误还是我错过了使用核心数据模型编辑器更新获取属性的谓词的关键步骤?
xcode4 - 具有递归条件或 Fetched 属性的 NSFetchRequest
我有一个具有递归关系的实体类型节点,称为父(反向子)。现在我想获取直接或间接在某个节点(即分支根节点)其他实体之下的所有实体。
由于我没有更好的主意,我创建了一个实体类型 Position ,其中包含一个实体类型 Node 的关系节点,其中仅包含一个实体,该实体设置为某个分支根节点。
在节点中,我想创建一个 Fetched 属性 isBelowBranchRootNode,如果 node.parent == position.branchRootNode 或 node.parent.isBelowBranchRootNode,则该属性应该为真。
我无法让它工作。任何更好的想法也非常感谢。
ios - 如何创建一个获取的属性来获取具有最小字段的实体?
我无法解决这个问题......我在获取的属性(而不是获取的请求)方面遇到了一些问题。
如何创建一个获取的属性来获取具有最小字段的实体?如果您看到这些捕获,您将看到它:
我必须在名为 minItemTimestamp 的获取属性中写什么?我尝试了几种选择,但都不起作用。"@min.items.timestamp" "items.@min.timestamp" @min 似乎是一个聚合,不确定这就是我要找的。
我试过这个回复,但没有运气: XCode Data Model Editor 中的 Fetched Property for minimum value
那么,我可以创建一个获取的属性来获取属于当前类别的所有项目,即时间戳最小的项目吗?
非常感谢,非常感谢您的帮助。
iphone - 获取的属性 - 谓词
我有一个关于在 NSPredicate 中使用获取的属性的问题(见下文“我的问题”)。这与获取获取的属性的谓词无关。为了澄清和其他可能也面临这个问题的人,我尝试制作一个小型示例项目。
示例项目
使用 Fetched Properties 的需求来了,因为我的应用程序因违反 iOS 数据存储指南而被拒绝。他们在QA1719中写道:
应用程序应避免将应用程序数据和用户数据混合在同一个文件中。
我认为这对于更轻松的 iCloud 同步可能是必要的,也可能有助于迁移。
那么,如何做到这一点呢?
我使用了一个预加载的 sqlite 数据库,我在第一次启动时从包路径中复制了该数据库,并用于保存用户编辑。因为您不应该混合预加载数据和用户数据,所以我试图将它们分开。
主要问题是,不可能在不同的商店之间建立关系(跨商店关系)。
我还没有找到 Fetched Property Project 的样本,所以我在这里尝试自己制作。
对于示例,有:
- 存储在持久存储 Books.sqlite 和
- 一种使书籍成为您最喜欢的书籍的方法。这存储在持久存储 UserData.sqlite 中。
实体是:
实体 'Books' 用于 PreloadedData,'Favorite' 应该包含 UserData。
收藏标签只是一个例子,它也可能是用户制作的笔记(可用的谓词)或者如果这本书是租给其他人的......
在我的 xcdatamodeld(Xcode 编辑器)中,我添加了两个配置(PreloadStore、UserStore)。每个包含只包含所需的实体。
它们与(其他一切都来自样板)一起使用:
我在带有谓词的书籍中创建了一个获取的属性 link_favorite
示例项目可以在这里下载。它正在工作,除了谓词(按收藏书籍过滤)。
我的问题
我想仅按最喜欢的那些书过滤我在 Books 中的获取。我尝试使用
在MasterViewController.m
(fetchedResultsController)中,但这只会导致崩溃。
我想我必须使用类似 here和 COUNT 或 SUBQUERY 的东西,但我想不通。
在此先感谢您的帮助!
- 编辑:
我做了一个简单的 NSArray 提取(核心数据),下面是工作:
但是我如何在 NSFetchedResultsController 的 SUBQUERY 中翻译这个(试过这篇博客文章)?错误的是:
cocoa - Core Data 跨存储获取属性
我目前正在考虑 Core Data 的一些问题。我在自己的商店中有一个用户模型,我无法控制它,因为它是随框架一起提供的。该模型的持久存储协调器、托管对象模型和上下文是自动创建的,并且无法触及。在其中,这个模型有一个单一的用户实体
另一方面,我有一个属性模型,其中包含我可以完全控制的属性实体。在那里,我将某些用户实体的属性存储在其他商店中。user 和 property 实体都有一个类似于外键的id属性。这个模型有它自己的 Persistent Store Cordinator、Managed Object Model 和 Context。
我现在想要的是将关联的用户实体作为属性实体的属性,这样我就可以绑定到类似的键路径myproperty.user.someValueOfTheUserEntity
(我知道使用获取的属性时 myproperty 可能是一个数组)。
但是,由于不支持跨商店关系,我想通过Fetched Properties使用弱关系。那只需要匹配两个相应的id属性。我在 Xcode 中为用户创建了一个 Fetched 属性,并在我的属性实体的类文件中创建了所需的访问器(正如其他问题中所建议的,我将 Fetched 属性返回的值视为一个数组)。
但是,我无法在 Xcode 中为 Fetched 属性设置目标实体,因为目标实体位于完全不同的商店中。我是否还必须在属性存储中定义我的用户实体?如果是这样,Core Data 怎么知道该实体不是从我的属性存储中获取,而是从用户存储中获取?
一些线程提到为此使用配置,但我找不到比提及“为此使用配置”更进一步的任何文档。
有人可以告诉我如何设置跨存储获取的属性吗?#