观察 NSMutableArray 的插入/删除

2023-11-23

一个类有一个类型为 NSMutableArray 的属性(和实例变量),带有合成访问器(通过@property)。如果您使用以下命令观察该数组:

[myObj addObserver:self forKeyPath:@"theArray" options:0 context:NULL];

然后在数组中插入一个对象,如下所示:

[myObj.theArray addObject:NSString.string];

一个observeValueForKeyPath...通知是not发送。但是,以下内容确实发送了正确的通知:

[[myObj mutableArrayValueForKey:@"theArray"] addObject:NSString.string];

这是因为mutableArrayValueForKey返回一个负责通知观察者的代理对象。

但是合成的访问器不应该自动返回这样的代理对象吗?解决这个问题的正确方法是什么——我应该编写一个只调用的自定义访问器[super mutableArrayValueForKey...]?


但是合成的访问器不应该自动返回这样的代理对象吗?

No.

解决这个问题的正确方法是什么——我应该编写一个只调用的自定义访问器[super mutableArrayValueForKey...]?

否。实施数组访问器。当您调用这些时,KVO 将自动发布适当的通知。所以你所要做的就是:

[myObject insertObject:newObject inTheArrayAtIndex:[myObject countOfTheArray]];

正确的事情会自动发生。

为了方便起见,你可以写一个addTheArrayObject:访问器。该访问器将调用上述实际数组访问器之一:

- (void) addTheArrayObject:(NSObject *) newObject {
    [self insertObject:newObject inTheArrayAtIndex:[self countOfTheArray]];
}

(您可以而且应该为数组中的对象填写正确的类,以代替NSObject.)

然后,代替[myObject insertObject:…], 你写[myObject addTheArrayObject:newObject].

Sadly, add<Key>Object:及其对应物remove<Key>Object:最后我检查了一下,KVO 仅识别集合(如 NSSet 中)属性,而不是数组属性,因此您不会获得免费的 KVO 通知,除非您在它识别的访问器之上实现它们。我提交了一个关于此的错误:x-radar://problem/6407437

I have 所有访问器选择器格式的列表在我的博客上。

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

观察 NSMutableArray 的插入/删除 的相关文章

  • 如何有条件地使用新的 Cocoa API

    苹果在 10 6 中添加了 NSPropertyListSerialization dataWithPropertyList format options error 并标记较旧的 NSPropertyListSerialization d
  • NSTableView 如何通过代码设置内容模式(基于视图或基于单元格)?

    如题 NSTableView 如何通过代码设置内容模式 基于视图或基于单元格 感谢您的帮助 NSTableView默认为基于单元的 这对于向后兼容性是有意义的 当表视图委托实现时 表视图是基于视图的 tableView viewForTab
  • 是否可以将 pyobjc 与特权 XPC 帮助工具和 XPCInterface API 一起使用?

    我相信这个问题的答案是 否 但我将其发布给社区 以防有人比我更成功 我有一个特权帮助程序工具 客户端 Cocoa 应用程序将其与 NSXPCConnection 和 NSXPCInterface 一起使用 该接口本身包括一个通过完成处理程序
  • 如何使用QLPreviewPanel?

    我该如何使用QLPreviewPanel 我知道它以前不是公共 API 但在 10 6 中已经有了 如何使用它在标准 QuickLook 面板中显示文件预览 查看快速查看下载器 http developer apple com librar
  • NSDateComponents - EXC_BAD_ACCESS 错误

    我确信有一个简单的答案的基本问题 我正在尝试获取照片的时间戳 当我尝试访问 NSDateComponents 以检索特定日期元素 例如 日 时 我收到 EXC BAD ACCESS 错误 首先 我的代码的相关部分 formattedDate
  • 用强/弱自我打破保留周期

    我读过关于强 弱的帖子self打破保留周期 但我仍然对它们如何工作感到困惑 我理解使用 weak typeof self weakSelf self创建对自我的弱引用 但我对强引用感到困惑 据我了解 强引用是指对self这样它就不会在块结束
  • 10.11 NSCollectionView - 动态确定单元格大小

    OS X v10 11 AppKit 发行说明 https developer apple com library mac releasenotes AppKit RN AppKit 10 11CollectionView建议可以根据每个项
  • 如何使用 iPhone 将照片上传到服务器?

    我正在编写一个 iPhone 应用程序 它可以拍摄照片然后将其上传到服务器 如何使用 Cocoa 将照片上传到服务器 我想我在某处使用 NSUrl Thanks Header interface EPUploader NSObject NS
  • NSMenuItem 中的自定义 NSView 未接收鼠标事件

    我使用 popUpStatusItemMenu 从 NSStatusItem 中弹出一个 NSMenu 这些 NSMenuItems 显示了一堆不同的链接 每个链接都通过 setAction 连接到目标的 openLink 方法 这种安排长
  • 在基于视图的 NSTableView 中,如何通过单击使控件成为第一响应者?

    基于视图的 NSTableView 似乎只有标准行为 为了使表内的文本字段成为第一响应者 用户必须双击或单击并 保持冷静 然而 考虑到基于视图的 NSTableViews 提供的灵活性 这种行为并不总是可取的 因为现在可能有很多不同且复杂的
  • Cocoa - 在另一个 xib 上显示 xib

    谁能告诉我如何 或指导我有关信息 在另一个 xib 笔尖 上显示 xib 笔尖 我希望如何放置它 以便我可以以编程方式将它移动到主笔尖 就像这样 这显然不起作用 void drawRect NSRect dirtyRect NSRect c
  • Cocoa 中播客应用程序的 Apple Api

    我正在为 mac 创建一个播客应用程序 用户可以在其中搜索 itunes 上的播客 是否有苹果内置的 api 我可以通过它从苹果 itunes 搜索和播放播客 或任何其他用于从 itunes 搜索播客的 api 谢谢 Edit 现在我找到并
  • 每个 CPU 核心处于 C0 电源状态的时间

    任何帮助弄清楚如何做到这一点都会很棒 在过去一秒内 每个 CPU 核心处于 C0 电源状态的时间有多少 这是针对 Mac 应用程序的 因此需要 Objective C cocoa 和 c OS X 没有任何公开 CPU c 状态的 API
  • 如何从 DTrace 脚本打印 NSString

    This question https stackoverflow com questions 1413623 how do i print a cfstringref in a dtrace action正在问同样的事情 但是当我尝试时
  • iOS 使用 NSColor 与 UIColor?

    有什么区别UIColor and NSColor 什么时候会使用每一种 我碰到NSColor在试图弄清楚的同时UIColor用于 iOS 中的属性字符串 我理解使用UIColor对于 UIKit 等 但我不认为NSColor对于这种事情确实
  • 如何在应用程序项目中使用 Cocoa Touch 框架

    我熟悉构建单个 iOS 应用程序 但我坚持使用 Cocoa Touch 框架向多个应用程序共享通用代码 问题 框架的头文件不可见 无法链接到消费应用程序项目 我做了什么 1 我创建了一个名为 libTestFramework 的项目 Coc
  • 如何为 NSAttributedString 内的文本设置“隐藏”属性?

    我有一个 Cocoa 应用程序NSTextView控件将其文本保存在NSAttributedString 实际上我相信这是一个NSMutableAttributedString 我可以轻松地在该字符串内的不同字符范围上设置和修改不同的文本属
  • 从 cocoa 编辑系统偏好设置

    有没有办法使用可可以编程方式编辑系统首选项 是否需要一些框架 我需要这样做来更改全局代理设置 另外 我的应用程序是沙盒的 有关于如何执行此操作的示例代码吗 感谢您的帮助 您正在寻找系统配置框架 但这并不容易 我认为沙盒应用程序不可能这样做
  • 适用于 Objective-C / iPhone 的良好 HTTP 库? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 UPDATE 这个问题显然已经过时了 参见日期 我建议只使用现代 iOS7 功能 例如 NSURLSession 我想 这个问题是为了历史
  • 避免“在此块中强烈捕获自身可能会导致保留周期”消息

    每次我必须在块内使用全局变量或属性时 如下所示 self save if isItSaving NO self saveMyFile 我必须像这样重写 BOOL iis isItSaving id myself self self save

随机推荐

  • C 中的完美数

    我需要编写一个 C 程序来找到完美数 main int n 1000 sum 0 for int num 1 num lt n num sum 0 for int i 1 i lt num i if num i sum i if sum n
  • 如何在 Windows 中的 git-bash 中执行位于带空格的文件夹(即“Program Files”)中的命令?

    当我使用 git bash 时 我有时想调用我的命令 PATH 实际上在我的 PATH 但如果 该命令位于包含空格的文件夹中的某个位置 则它将无法运行 例如 如果程序打开C Program Files whatever aCmd exe我输
  • 动态增加java堆空间

    我编写了一个 java 程序 用于测试具有不同数量处理器的不同机器上的几个多线程算法的速度 在某些机器上 合并排序 会失败 因为它需要相当大的堆空间才能处理非常大的数组 我可以在运行程序之前轻松地自己更改 java 堆空间 但我觉得更健壮且
  • 泛型类的类对象(java)

    java中有没有一种方法可以获取类似的实例Class
  • 如何在 Java Swing 中创建窗口关闭处理程序

    我试图在我的窗口 使用 Java Swing 创建的 关闭时调用一个函数来进行清理 在我的初始化代码中我这样做 public class FormLogin extends JFrame private void initComponent
  • 为什么@RequestMapping注解在java中接受String参数,但在scala中不接受?

    阅读 RequestMapping文档 http static springsource org spring docs 2 5 x api org springframework web bind annotation RequestMa
  • Eclipse 内容辅助错误

    最近 我在 Eclipse 中的内容辅助方面遇到了越来越多的问题 在我的一些项目中 我没有从内容协助中得到任何建议 而在其他项目中 我得到了部分或全部预期的建议 通常 Eclipse 中不会出现 错误 但下面是我收到错误时的一个示例 内容辅
  • Pandas - 根据条件重复行

    如果该行满足条件 我试图创建一个重复的行 在下表中 我根据 groupby 创建了累积计数 然后对 groupby 的 MAX 进行了另一个计算 df PathID df groupby DateCompleted cumcount 1 d
  • 如何使用运行时定义的比较器定义有序映射/集?

    这类似于如何将自定义比较器函数与 BTreeSet 一起使用 但是就我而言 直到运行时我才会知道排序标准 可能的标准很广泛并且不能被硬编码 想想像按到目标的距离排序 or 按有效负载中的特定字节排序或其组合 创建地图 集合后 排序标准不会更
  • Chrome 丢失 cookie

    我的实时网站上出现错误 但我在开发环境中没有看到该错误 而且似乎只在 Chrome 中发生 我四处寻找解决方案 发现仅与 Auth cookie 有关的问题 实际上我过去提出过关于 chrome 和 auth cookie 的问题 但这是不
  • ARKit – 使用世界光线而不是屏幕点进行光线投射

    我想实现类似的目标ARCore的光线投射方法它采用世界空间坐标中的任意射线而不是屏幕空间点 List
  • json 字符串可以包含 HTML 标签吗?

    考虑这是我的 json 字符串 Mat id 2 Mat Name Steel Measurement mm Description Steel 我可以像这样在这个 json 字符串中添加 HTML 标签吗 Mat id 2 Mat Nam
  • 过早优化的实用规则[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 看来这句话 过早的优化 是
  • RMarkdown PDF“LaTeX3 错误:错误变量”

    我已经通过 RMarkdown 创建 PDF 报告几个月了 但是今天在新机器上安装 MikTex R 以及 rmarkdown 和 tidyverse 软件包后 我在尝试编织 PDF 时收到以下错误消息 C PROGRA 2 Pandoc
  • YouTube API v3 每次都不断请求授权

    我正在使用 YouTube api v3 来检索视频列表 示例如下 https developers google com youtube v3 code samples php retrieve my uploads 我打开页面 应用程序
  • NodeJS 原生鼠标和键盘绑定 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我一直在寻找一个支持鼠标和键盘监听和执行的原生nodejs模块 我找到了这个 https npmjs org package mouse但源代码看起
  • 在 Windows Server 2012 上注册 ASP.NET 4.5 的替代方法

    当我运行 WCF 服务时 出现 MIME 未注册错误 我用过这个link来解决这个问题 之后 我开始收到另一个错误 要求我向 IIS 注册 ASP NET 框架 所以我用了 aspnet regiis 命令 但它显示以下错误 Microso
  • D3 Crossfilter 基本示例

    我刚刚接触 D3 非常喜欢交叉过滤库 我想生成类似的东西 但我没有使用航班数据 而是采用以下格式的 CSV 数据 行 列 值 我只想要一个显示值的直方图 以及一张按值字段排序的表格 很难理解他们的例子中发生了什么 有人可以建议或展示一个非常
  • YouTube 嵌入在 Firefox 中不起作用

    我嵌入了三个 Youtube 视频 它们在除 Firefox 之外的所有浏览器中都能完美运行 尝试在服务器端清除缓存 在本地清除cookies和缓存 尝试了18台不同的计算机 尝试了Windows 7 Windows 8 Linux Ubu
  • 观察 NSMutableArray 的插入/删除

    一个类有一个类型为 NSMutableArray 的属性 和实例变量 带有合成访问器 通过 property 如果您使用以下命令观察该数组 myObj addObserver self forKeyPath theArray options