核心数据 NSManagedObject - 跟踪属性是否更改

2024-03-04

我有一个对象——Config。我想知道是否Account属性上Config已经改变。当这种情况发生时,我想发送一个NSNotification这样所有关心何时的代码Account变化就会知道。我最初的想法是在我的NSManagedObject我要重写的子类setAccount设置瞬态属性的方法AccountDidChange to true。然后在didSave if AccountDidChange was true我会发送通知,然后将其设置回false。有没有更好的办法?但我的问题是,根据我读过的内容,通过改变AccountDidChange回到false,我会弄脏我的对象并需要再次保存。

更多信息: 这Configobject 是应用程序的当前配置。Account实际上可以改为ActiveAccount。有一个关系到Account具有所有帐户列表的实体。这个想法是用户可以更改应用程序的活动帐户。所以我们有一组服务器,用户一次只能登录一个。Config.Account指向该活动帐户,它用于设置与服务器的连接以检索信息。我正在使用此通知Config.Account已更改为告诉其他对象清理其信息 - 例如警报列表。基本上,所有信息都是每个帐户的,因此需要将其删除,然后在下次加载时使用新的活动帐户重新获取。

另外,给定的名称不是我的实际对象名称 - 只是想让示例更容易理解。


看看KVO(键值观察):键值观察编程指南 https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/KeyValueObserving/Articles/KVOBasics.html#//apple_ref/doc/uid/20002252-178352。这是在 Cocoa 中执行此操作的标准方法,也是成为一名优秀的 Cocoa 程序员需要了解的基本技术。

KVO 会让关心变化的对象Account属性(您可能应该将其命名为account, not Account) 注册以便在财产变更时收到通知。 KVO 将“只适用于”标准 NSManagedObjects,无需您做任何额外的工作。

相关方法如下:

  • -addObserver:forKeyPath:options:context:您可以在 Config 对象上调用它来设置观察
  • -observeValueForKeyPath:ofObject:change:context:每当观察值发生变化时,都会在观察者对象上调用它
  • -removeObserver:forKeyPath:您需要确保在观察者不再需要更改通知时(包括在观察者被释放之前)调用它。

链接文档中对此进行了更详细的描述。

编辑如下:

如果不了解有关您的应用程序的任何信息,就很难知道为什么您只想在保存时收到通知。 NSManagedObjectContext 发布 NSManagedObjectContextWillSaveNotification 和 NSManagedObjectContextDidSaveNotification。通知的 userInfo 具有包含插入、更新和删除对象的数组,但通知不如单个属性那么细粒度。我想您可以手动跟踪 didSave 通知之间更改的帐户。如果您的商店中有大量配置,这可能会变得低效。

对 NSManagedObjects 的更改是立即的,它们只是在您调用之前不会保存到持久存储中save:在托管对象上下文上。也许如果您详细解释一下您想要实现的目标及其原因,我可以更好地提供帮助。

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

核心数据 NSManagedObject - 跟踪属性是否更改 的相关文章

  • 适用于 IOS 和 Android 的支付网关 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个应用程序 用户必须在澳大利亚餐馆通过应用程序 android ios 付款 有两种付款方式 通过 PayPal 或 Visa
  • Swift Codable 将空 json 解码为 nil 或空对象

    这是我的代码 class LoginUserResponse Codable var result String var data LoginUserResponseData var mess String public class Log
  • 从 iOS 应用程序内的 Junos Pulse 获取用户凭据

    我正在通过 Junos Pulse 在 iPad 中建立 VPN 连接 以进入我组织的 Intranet 谁能告诉我是否有任何 iOS api 或 SDK 可用于获取在 iOS 应用程序内的 Junos pulse 中输入的用户凭据 Jun
  • 自定义 UITableViewCell 选择样式?

    当我点击我的UITableViewCell 当我单击单元格时 背景部分 我的背景图像未覆盖的区域 会变成蓝色 另外 所有的UILabel单击时单元格上的 s 变为白色 这就是我想要的 然而 我不想要的是当我点击它时的蓝色背景 但如果我这样做
  • 确定 Objective-C 方法在运行时是否是可变的

    有没有办法在运行时找出给定方法是否是可变参数类型 就像是method getTypeEncoding 这不会告诉我一个方法是否接受可变数量的参数 或者有什么技巧可以告诉我们吗 罗伯特的评论是正确的 考虑 interface Boogity
  • 推入 UINavigationController 时隐藏 FBFriendPickerViewController 导航栏

    介绍一个实例FBFriendPickerViewController using presentViewController animated completion 非常简单 该类似乎是针对该用例的 但是 我想推送一个实例FBFriendP
  • 以编程方式触发iOS摇动事件

    如何以编程方式触发 iOS 中的摇动事件 我尝试过以下方法 但它总是崩溃 void shake NSLog TEST UIMotionEventProxy m NSClassFromString UIMotionEvent alloc in
  • 关于窗口层次结构的警告

    我的调试器中出现这样的警告 这是什么意思 Warning Attempt to present
  • iphone NSDate 转换问题

    在我的 facebook 图表 Api 中 我正在获取这些数据 来自杰森 updated time 2011 05 17T14 52 16 0000 我正在使用此代码将其转换为有效的日期格式 NSDateFormatter df NSDat
  • Xcode 中的 iOS 9 警告 - 此文件设置为针对早于项目部署的版本进行构建。功能可能有限

    我刚刚将我的 Mac 更新到最新的操作系统 并将 Xcode 更新到最新版本 现在我收到此警告 但我不知道该由谁来删除它 也不知道它的真正含义是什么 有人可以向我解释一下吗 Thanks Select Main storyboard in
  • 检测 AvPlayer 何时切换比特率

    在我的应用程序中 我使用 AVPlayer 通过 HLS 协议读取一些流 m3u8 文件 我需要知道在流会话期间 客户端切换比特率多少次 我们假设客户端的带宽正在增加 因此客户端将切换到更高比特率的段 AVPlayer能检测到这个开关吗 T
  • 频繁绘制 CGPath 时的性能

    我正在开发一个将数据可视化为折线图的 iOS 应用程序 该图被绘制为CGPath在全屏自定义中UIView最多包含 320 个数据点 数据经常更新 图表需要相应地重新绘制 刷新率为 10 秒就很好了 到目前为止很容易 然而 我的方法似乎需要
  • 防止 AlertView 被解雇

    任何人都可以帮助我防止在其按钮单击事件上解雇警报视图吗 我有一个 textview 作为我的alertView 的子视图 如果 textview 值为 nil 我不想关闭它 因为这是一个非常老的问题 但我得到了一个解决方案 并且如果其他开发
  • NVActivityIndi​​catorView 仅适用于特定视图

    我正在使用这个库https github com ninjaprox NVActivityIndi catorView https github com ninjaprox NVActivityIndicatorView用于显示加载指示器
  • WhatsApp 显示警告“此项目无法共享。请选择其他项目。”对于 iOS 应用程序。

    我正在开发一个 iOS 应用程序 在该应用程序中 我有社交共享功能 并且社交共享功能使用深度链接来共享 URL 该网址共享对于所有应用程序都运行良好 除了WhatsApp 它会显示一个警报弹出窗口 此项目无法共享 请选择其他项目 以下是我的
  • git 提交错误:检测到大文件

    您好 我正在为 ios 8 1 开发一个应用程序 xcode 我已经使用 googleMaps 框架来实现自动完成功能 当我尝试在 Git 中推送我的项目时 我收到大文件检测错误 后来尝试使用 git lfs 并跟踪 git 检测到的文件
  • 为什么我的视图仍然以横向呈现?

    我的视图是由导航控制器控制的 因此我将导航控制器支持的方向设置为明确的纵向和纵向UpSideDown 这可以工作 但是如果调用视图时前一个视图处于横向状态 它将以横向方式呈现并保持横向状态 直到设备旋转 如何防止这种情况发生 这是我的代码
  • 避免 UIImage 的 imageNamed - 内存管理

    我正在经历这个链接 http akosma com 2009 01 28 10 iphone memory management tips 我遇到了一个点避免 UIImage 的 imageNamed 出于什么原因我们应该避免这种情况 它会
  • UIWebView Bug:-[UIWebView cut:]:无法识别的选择器发送到实例

    In the UIWebView 如果包含文本的输入元素具有焦点 并且按下按钮导致输入失去焦点 则随后双击输入以重新获得焦点并从出现的弹出栏中选择 剪切 或 复制 或 粘贴 会导致这UIWebView因错误而崩溃 UIWebView cut
  • Swift C 回调 - Swift 类指针的 takeUnretainedValue 或 takeRetainedValue

    我有一些UIView or UITableViewCell 里面我有 C 回调 例如 CCallback bridge self observer data gt Void in let mySelf Unmanaged

随机推荐

  • Swift:通过在窗口中拖放打开文件

    在 Swift 中 如何在 Mac 应用程序的窗口中构建一个区域 用户可以将文件夹拖放到该区域 并让我的应用程序接收该文件夹的路径 原则上 在我看来 这与苹果的概念类似CocoaDragAndDrop 示例 https developer
  • 如何在 Scala 中比较两个对象是否相等?

    我在两个对象之间进行了非常基本的相等性检查 但它失败了 package foo import org junit Assert object Sandbox extends App class A val a new A val b new
  • 类型错误:“in ”需要字符串作为左操作数,而不是列表(函数)

    variableName display screen sound audio fileName PPP Abc P1 PPP d display s screen ss sound a audio d P1 loop True def C
  • 为什么我不能从下一个日期周期中减去一个日期周期并转换为整数?

    我试图确定两个月之间的差异是偶数还是奇数月份 我使用了命令 import pandas as pd pd to datetime 2019 01 01 to period M pd to datetime 2018 08 01 to per
  • 使用 xlrd 和 xlwt 编辑现有 Excel 工作簿和工作表

    In the 文档 http www simplistix co uk presentations python excel pdf for xlrd and xlwt我学到了以下内容 如何阅读现有的工作簿 工作表 from xlrd im
  • .gitattributes 在 Mac 和 Windows 上无法正常工作

    在我的项目中 我使用具有不同操作系统的计算机 一个是 Mac 第二个是 Windows 当我使用 git 时 每个更改都会显示为整个文档更改 原因是这两个操作系统中的行尾不同 我读了这个https help github com artic
  • 如何使用Struts 2和Hibernate维护会话?

    我需要知道如何维护一种形式和多种形式的会话input Name City Country 使用Struts2 最后数据将使用Hibernate存储到数据库 该表单有两个按钮 add 存储到会话 Submit 存储到数据库 首先 输入表格详细
  • GAE:memcache:在多个应用程序实例中是否相同

    我有一个非常基本的问题 在 GAE 中 如果我使用 memcache 来存储第一次从数据库检索到的一些数据 如果该数据在缓存中保留大约 2 天 那么所述应用程序的所有实例都会得到 查看 它并从缓存中检索它 或者每个应用程序实例的缓存是独立的
  • 滚动到模式窗口内的元素

    我有一个模式窗口 需要能够打开模式 然后将用户滚动到模式中的特定位置 我正在使用 AJAX 将模态内容获取到 PHP 脚本 例如 mypage php loc someid 在 PHP 脚本中 我有这个 JS 来执行滚动 document
  • URI 中的方案是可选的吗?

    最近 我被要求向网站添加一些 Woopra JavaScript 并注意到 URL 以双斜杠开头 即省略了方案 我以前从未见过这个 所以我试图了解更多信息 但我唯一能找到的是Woopra 常见问题解答中的一个项目 http www woop
  • Travis 无法构建 Android 项目,没有 local.properties

    事情是这样的 我已经在 Travis CI 上构建了我的项目好几次了 但每次都会遇到同样的问题 错误日志 What went wrong A problem occurred evaluating root project LiteRead
  • Eclipse 在 Ctrl-S 上跳转到函数名称

    当我按 Ctrl S 将 Java 文件保存在 Eclipse 中时 它会跳转到函数名称 这很烦人 有人知道该怎么办吗 转到 窗口 gt 首选项 gt 常规 gt 按键 您也可以搜索Keys在主首选项窗口中 您很可能添加了一个绑定 当您按下
  • 创建圆形鼠标悬停饱和效果

    我有两个版本的图像 去饱和版本和全彩版本 我想要实现的是悬停效果 其中将鼠标悬停在去饱和图像上会显示图像的彩色版本的圆圈 这有点像将聚光灯照射在饱和度降低的图像上以显示其颜色 然后 当您将鼠标移开时 它会淡回到不饱和状态 我知道我可能可以使
  • 如何扩展 OAuth2 主体

    我们正在开发一个将 OAuth 2 用于两个用例的应用程序 访问后端微服务 使用client credentials 验证应用程序的用户 使用authorization code 因此将用户重定向到 Keycloak 进行登录 大致配置如下
  • 新手入门:ruby 中的实例变量?

    请原谅这个新手问题 但为什么 game score 总是为零 bowling rb class Bowling game score 0 def hit pins game score game score pins end def sco
  • 如何在Python中调用同一类的不同实例?

    我是Python新手 我正在 SimPy 中编写一个模拟来对生产线进行建模 如下所示 机器 1 gt 缓冲区 1 gt 机器 2 gt 缓冲区 2 gt 等等 我的问题 我有一个类 Machine 其中有多个实例 假设当前实例是机器 2 该
  • 如何在 Google App Engine 上用 Python 解析 xml

    为了这以下 XML http www boardgamegeek com xmlapi boardgame 13 如何获取 xml 然后解析它以获取值
  • 使用 fscanf() 与 fgets() 和 sscanf()

    在 实用 C 编程 一书中 我发现结合了fgets and sscanf 用于读取输入 然而 在我看来 仅使用以下方法就可以更轻松地实现相同的目标fscanf 功能 来自书中 想法 而不是示例 int main int age weight
  • HighCharts 动态改变图表类型

    在 ASP NET 站点中使用 HighCharts 2 2 3 看http jsfiddle net wergeld TDLvc http jsfiddle net wergeld TDLvc 代码示例 我的网站设置与 jsFiddle
  • 核心数据 NSManagedObject - 跟踪属性是否更改

    我有一个对象 Config 我想知道是否Account属性上Config已经改变 当这种情况发生时 我想发送一个NSNotification这样所有关心何时的代码Account变化就会知道 我最初的想法是在我的NSManagedObject