当特定属性更改时如何更新 NSManagedObject?

2024-03-06

想象一下我有一个核心数据对象,产品。每个产品都有一个quantity, price, and total属性。 Total 是为了提高从表中检索项目时的效率。 (我知道可能有一种有效的方法可以使用获取的属性来获取计算值,但这只是一个示例,这个答案不是我想要的。)

+------+----------+-------+-------+
| Name | Quantity | Price | Total |
+------+----------+-------+-------+
| Foo  |        1 |    20 |    20 |
| Bar  |        0 |    30 |     0 |
| Baz  |        3 |     5 |    15 |
+------+----------+-------+-------+

假设price产品的本质永远不会改变。但是,那quantity确实改变了。每当quantity更改,我希望收到通知,以便我可以重新计算total。如果可能的话,我想避免使用 KVO,因为我有一个自定义 NSManagedObject 类,product,并且我想重写其方法之一以更新价格,而不必担心在其自身属性上注册/取消注册通知。

仅应在价格更改时调用此方法,而不是每次对象的任何属性更改时调用。

我还希望在值更改时立即触发此方法(例如,不在保存上下文之前触发),以便我可以访问新的值total保存上下文之前的属性。

我应该重写哪个方法?它可以在我的 Product 类的类别中完成吗?


Note: 这个问题 https://stackoverflow.com/questions/3901207/detecting-changes-to-a-specific-attribute-of-nsmanagedobject类似,但主要关注运行多个线程,这可能需要更复杂的答案。我正在寻找简单的、单线程的东西。


您应该重写 setter 方法quantity您的实体的属性:

- (void)setQuantity:(NSNumber *)quantity
{
    [self willChangeValueForKey:@"quantity"];
    [self setPrimitiveValue:quantity forKey:@"quantity"];
    [self didChangeValueForKey:@"quantity"];

    NSNumber *price = ... // compute new price
    self.price = price;
}

如果您不想更改,可以将该代码添加到 Product 类的类别中 Xcode 生成的文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当特定属性更改时如何更新 NSManagedObject? 的相关文章

  • 如何在 Core Data 上下文之外使用 Core Data 模型子类?

    我正在尝试在 Swift 中制作一个天气应用程序 它将保存我添加到核心数据的城市 每个城市都包含一个天气对象 该对象也保存到核心数据和其他各种变量 但我很快就发现 在 Core Data 上下文之外使用 Core Data NSManage
  • NSFetchedResultsController 获取请求 - 更新谓词和 UITableView

    在我的 iPhone Core Data 应用程序中 我将其配置为主从视图设置 主视图是一个 UITableView 它列出了List实体 List 实体与Task实体 称为 任务 并且任务实体与List称为 列表 When a List在
  • CoreData 获取孩子的父母

    我有一个one to many关系store lt gt gt product 并且我知道该产品 我如何才能找到该产品的父级是谁 例如 我可以拥有许多具有相同值的产品product1 has parent1以及具有相同值的另一种产品prod
  • NSOperationQueue 和 NSFetchedResultsController

    我使用队列和结果控制器的组合来更新和显示一些核心数据对象 在我的 uitableviewcontroller 中 我每隔 X 秒调用一次主控制器对象中的方法 NSTimer scheduledTimerWithTimeInterval 2
  • 为什么我需要在核心数据项目中使用原始访问器方法?

    为什么我需要在核心数据项目中使用原始访问器方法 我正在阅读有关核心数据的内容并注意以下内容 默认情况下 Core Data 动态地 创建高效的公共和原始的 获取和设置访问器方法 建模属性 属性和 管理对象的关系 课程 例如 给定一个实体 属
  • NSFetchedResultsController XCode 7 问题

    Xcode 7 beta 6 和 NSFetchedResultsController 今天让我头疼 如果我使用 Xcode 6 编译相同的代码 使用 Swift 2 修复 程序可以在设备和模拟器 iOS 7 iOS8 上运行 但是 如果我
  • RestKit 对象与外键的映射关系

    RestKit 是否可以在不将外键存储为属性的情况下连接关系 即直接从 JSON 中的键路径存储 特别是 我有一个 Job has many Rooms 关系 房间的 JSON 不包含作业 而是分别加载 job id 1 name John
  • 使用每个实体包含许多图像的核心数据?

    我是 Core Data 的新手 正在开发我的第一个个人 iOS 应用程序 我有一个实体 我们称之为Car 其中有一个缩略图以及与其关联的其他图像库 数据使用同步到在线服务ASIHTTPRequest and JSONKit 该应用程序不需
  • iOS 的云存储选项

    我正在尝试创建一个后端 让许多用户可以在我正在创建的 iPhone 应用程序中相互通信 我尝试过使用 Core Data Google App Engine Google Cloud Storage 和 Amazon Web Service
  • 使用新数据快速更新 UITableView

    我正在尝试重新填充我的UITableView来自另一个 JSON 调用的数据 然而 我当前的设置似乎不起作用 虽然有很多相同的问题 但我可以找到我已经尝试过的答案 我将 API 数据保存在CoreData实体对象 我用我的 UITableV
  • 轻量级核心数据迁移后,如何为现有实体的新属性设置默认值?

    我已经成功完成了核心数据模型的轻量级迁移 我的自定义实体 Vehicle 收到了一个新属性 tirePressure 它是 double 类型的可选属性 默认值为 0 00 当从商店中获取 旧 车辆 在迁移发生之前创建的车辆 时 其 tir
  • 跳过痛苦的 Core Data 迁移并迁移到新的数据模型

    当我什至不关心旧数据时 我花费了大量时间将核心数据整理到新的迁移中 有没有一种方法可以删除所有现有数据并跳转到新的数据模型 而不是每次更改数据模型时都处理映射模型的麻烦 是的 只需删除商店文件并重新创建即可 我经常 至少在开发过程中 让我的
  • 如何为现有核心数据实体添加更多属性?

    我有一个正在使用核心数据的项目 我需要向现有实体 列 添加更多属性 列 如果我手动将属性添加到数据模型应用程序崩溃 这是由于我用来将数据插入表的上下文保存之前 请帮助 谢谢 所以我的问题是我不知道这个持久存储协调器代码去了哪里 事实证明它是
  • 如何按日期正确对从 CoreData 获取的列表进行分组?

    为了简单起见 假设我想创建一个简单的待办事项应用程序 我的 xcdatamodeld 中有一个实体 Todo 其属性id title and date 以及以下 swiftui 视图 如图所示的示例 import SwiftUI struc
  • CoreData 和 SwiftUI:环境中的上下文未连接到持久存储协调器

    我正在尝试通过构建一个作业管理应用程序来自学核心数据 我的代码构建良好 应用程序运行正常 直到我尝试将新分配添加到列表中 我收到这个错误Thread 1 EXC BREAKPOINT code 1 subcode 0x1c25719e8 在
  • 保存时出现 iphone 核心数据未解决的错误

    尝试保存时 我从核心数据中收到一条奇怪的错误消息 但问题是错误不可重现 在执行不同任务时 它会在不同时间出现 错误消息 Unresolved error Domain NSCocoaErrorDomain Code 1560 UserInf
  • 如何从 Xcode 4 中的实体创建用户界面?

    我已经用核心数据进行了几天的实验 并且在过去的几个小时里尝试找出如何从 xcode 4 中的实体创建 UI 根据我一直在阅读的书籍 您必须选择将核心数据实体拖到界面生成器中的窗口中 但是当我在 xcode 4 中执行此操作时 没有任何反应
  • 核心数据:为什么必须调用重新加载数据才能使我的应用程序运行?

    我花了整个晚上调试一个简单的应用程序 该应用程序从网络检索一张图像 是的 是的 旨在让我的生活更轻松 并将其显示在表格视图中 我这样做是为了练习学习核心数据 在我修复它之前 错误消息显示如下 2012 09 30 06 16 12 854
  • 核心数据对多关系。它们是延迟加载吗?

    我在核心数据 适用于 iPhone 中有典型的模型 其中包含部门和员工 部门 gt gt 员工 我不想每次加载时都加载一个部门的所有员工 所以我想将员工创建为获取的属性 我想我可以定义一些像这样的谓词 employee deparmentI
  • 现有的和未输入错误的密钥的 NSUnknownKeyException

    我得到以下输出 Terminating app due to uncaught exception NSUnknownKeyException reason

随机推荐