问题标签 [key-value-coding]

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 投票
3 回答
2103 浏览

objective-c - 通过 KVC 访问集合(以保护集合并符合 KVO)

我有一个类 Test,它有一个 Foos 数组。我想在不直接暴露 ivar 的情况下提供对 Foos 的访问。我正在尝试使此 KVC 兼容(也为 KVO 兼容铺平道路)。我有:

测试.h

测试.m

当客户端尝试添加 Foo 时,这将进入无限循环:

我究竟做错了什么?

0 投票
3 回答
1160 浏览

xml - 应采取哪些步骤将我的 XML 转换为 Core Data 对象?

我有一个包含商店列表的 XML 文件,下面是简化版本。我想要帮助的是关于将这些数据移动到对象中以存储在 Core Data 中的最简单方法的一些高级想法。我看到了有关键值对的建议,但正如您在下面的示例中所见,我有具有相同名称/键的子元素,并且每个商店元素可以有任意数量的这些元素。

我打算将这些对象存储在应用程序中以供将来使用(它们将成为地图上的注释)。因此,每个重复字段都需要存储,其中一个是不够的。我知道如何在 Core Data 中对其进行建模,我相信,我将拥有一个电话号码实体和一个商店实体,并将仅基于<store-id>. 我只是想使用一种简单的方法通过其他一些数据结构将它们从 XML 移动到 Core Data。

XML 示例:

如果键值对是要走的路,请指出我可以解释重复元素的方法。如果有另一种方式,我会全神贯注。

谢谢

0 投票
1 回答
5058 浏览

cocoa - mutableArrayValueForKey 的 KVC 搜索模式是什么?

我试图更好地理解 Cocoa 的键值编码 (KVC) 机制。我已经阅读了 Apple 的Key-Value Programming Guide,但对于某些 KVC 方法如何搜索键仍然有些困惑。特别是mutableArrayValueForKey:

下面我将解释我如何理解valueForKey:KVC “getter”的工作原理。然后我会回答关于 mutableArrayValueForKey 的问题。


有七种不同的“getter”KVC 方法:

在属性(名为myKey)中搜索值时,Apple 的文档声明valueForKey:搜索如下:

  1. 在接收器内部尝试-getMyKey-myKey-isMyKey(按顺序)
  2. 如果没有找到,它会尝试这些有序的、对多的 g​​etter(NSArray):

    /li>
  3. 接下来,它会尝试这些无序的、对多的 g​​etter(NSSet):

    /li>
  4. 接下来,它尝试直接访问实例变量,假设YESaccessInstanceVariablesDirectly,按以下顺序返回:_myKey_isMyKeymyKeyisMyKey

  5. 最后,它放弃并调用接收类的- (id)valueForUndefinedKey:(NSString *)key方法。通常这里会引发错误。


我的问题是,mutableArrayValueForKey: 的搜索顺序模式是什么?

苹果的文档说明了这一点

有序集合的访问者搜索模式

mutableArrayValueForKey: 的默认搜索模式如下:

在接收者的类中搜索名称匹配模式 -insertObject:inAtIndex: 和 -removeObjectFromAtIndex: 的一对方法(分别对应于 NSMutableArray 原始方法 insertObject:atIndex: 和 removeObjectAtIndex:),或匹配模式 -insert:atIndexes 的方法: 和 -removeAtIndexes: (对应于 NSMutableArrayinsertObjects:atIndexes: 和 removeObjectsAtIndexes: 方法)。如果找到至少一种插入方法和至少一种删除方法,则发送到集合代理对象的每个 NSMutableArray 消息将导致 -insertObject:inAtIndex:、-removeObjectFromAtIndex:、-insert:atIndexes: 和 -removeAtIndexes: 消息的某种组合被发送到 mutableArrayValueForKey: 的原始接收者。...ETC...

这对我来说毫无意义,因为它正在讨论类似“setter”的方法。 mutableArrayValueForKey:返回一个 NSMutableArray。上面列出的所有方法都返回 void,并用于编辑 NSMutableArray,而不是获取它。例子:

知道 Apple 在他们的文档中试图说什么,或者这可能是一个错误吗?

我的理论是,这可能会采用与搜索检索 KVC 值时mutableArrayValueForKey:类似的路径。valueForKey:我只是不确定那真的是什么路径。

谢谢你尽你所能的帮助!:)

0 投票
1 回答
2253 浏览

objective-c - NSValue 如何发挥它的魔力?

我有一个 MVC 应用程序。该模型具有一个 struct 属性NSSize。可以这样写:

视图NSSize使用键值编码设置它。但是,您不能对结构进行键值编码,因此我将其包装在一个NSValue对象中,如下所示:

据我了解,这应该不起作用,因为访问器需要一个 struct 而不是NSValue. 但它完美地工作。神奇地。

这怎么可能?

0 投票
1 回答
295 浏览

objective-c - 如何在 MVC 中集成 KVC?

所以我在 Cocoa 中有一个 MVC 应用程序。
有一些自定义视图、控制器和模型。当然,视图需要知道一些东西,所以它们从控制器获取数据。但是,他们不使用控制器中的访问器,他们使用带有直接调用模型的键路径的 KVC:

这大大简化了事情,从技术上讲,视图仍然不知道模型(即指针)。但当然,他们直接访问它。

这是 KVC 和 MVC 的通常(或至少是明智的)用法吗?
或者你将如何实现这种沟通?

0 投票
1 回答
242 浏览

objective-c - 你需要实现什么来为 NSArrayController 提供内容集?

嘿,

我正在用 Xcode 写一些东西。我使用 Core Data 来实现持久性,并使用 Cocoa Bindings 将视图和模型链接在一起;几乎是你普通的 Core Data 应用程序。

我的 Xib 中有一个数组控制器 (NSArrayController)。按照惯例,它的 managedObjectContext 绑定到 AppDelegate,并跟踪实体。到目前为止,一切都很好。

现在,这个 NSArrayController 的“内容集”投标限制了它的内容集(如你所料),通过来自另一个 NSArrayController (otherAc.selection.detailsOfMaster) 中的选择的 keyPath。这是实现主从关系的常用方法。

我想在运行时使用其他控件可变地更改密钥路径。这样,我将返回一个包含其他几个内容集的内容集,这些内容集都是高级的,并且超出了 Interface Builder。

为了实现这一点,我认为我应该将内容集绑定到我的 AppDelegate。我试过这样做,但不知道要实现什么方法。如果我只是创建 KVC 方法(objectSet、setObjectSet),那么我可以在 contentSet 方法中为 Array Controller 提供一个 Content Set。

但是,我认为我没有正确绑定它,因为它不会“刷新”。我是绑定新手;当其他事情(例如主 NSArrayController 中的选择)发生变化时,我需要实施什么来正确更新内容集?

0 投票
1 回答
102 浏览

objective-c - 核心数据上下文中的意外键值行为

如果我创建了一个字符串数组(通过键值编码),其中包含第一次存储在 App Delegate 中的托管对象实体的属性的名称,我得到一个 NSStrings 数组,没有任何问题。如果我随后从代码中的相同入口点进行相同的调用,则相同的集合将成为 NULL 对象的数组——即使核心数据上下文中没有任何变化。

一个不吸引人的解决方法是每次都重新创建字符串数组,但我想知道是否有人猜测幕后发生的事情。

0 投票
1 回答
295 浏览

cocoa - 如何追踪 KVC 异常的来源:该类与键工具栏的键值编码不兼容?

当我尝试运行我的应用程序时出现此错误:

MyViewController曾经有一个IBOutlet称为“工具栏”的工具栏连接到UIToolbar笔尖中的对象。我决定不再需要工具栏或笔尖,所以我将它们从项目中删除。但是 Xcode 似乎仍然想引用“工具栏”。

如果我不再使用笔尖,对工具栏的引用可能在哪里?我可以合成一个虚拟的“工具栏”属性来安抚 Xcode,但我想避免这种丑陋的 hack。

编辑:奇怪的是,当我在设备而不是模拟器上运行代码时,没有引发异常。此外,当我使用一个简单的笔尖MyViewController(不包含工具栏)时,异常就消失了。我正在使用 git,当我返回运行以前的代码提交时,MyViewController甚至有一个工具栏或一个 nib,这些奇怪的也给出了异常。该代码曾经运行良好。我确实认为这个异常与 Xcode 和模拟器有关,以及当我从项目中删除不需要的 nib 时的某种遗留状态。

0 投票
1 回答
89 浏览

iphone - 如何在 Cocoa 中建立 has-many 关系?

我正在 Cocoa 中构建一个(非常)简单的 FTP 应用程序,我需要将信息存储在受支持的不同类型的服务器上。因此,我创建了一个 ServerType 类,它存储有关单一类型服务器的所有相关信息。然后,我有一个 ServerTypes 类,旨在管理所有创建的 ServerType 类。

我的问题是,如何建立两个对象之间的关系。有没有首选的方法呢?

此外,由于 Objective-C 不支持非实例类,我应该在哪里创建必须在整个程序中使用的 ServerTypes 实例?还是有更好的方法来做到这一点?我需要它符合 KVC,以便我可以将其中一个 ServerType 属性绑定到 NSPopupBox。

我对 Cocoa 和 Objective-C 还很陌生。

0 投票
1 回答
710 浏览

iphone - iPhone OS:为什么我的 managedModelObject 不符合键值编码?

好的,所以我正在尝试为我的应用程序构建这个统计跟踪器,并且我已经构建了一个名为 statTracker 的数据模型对象,它可以跟踪我想要的所有内容。我可以使用选择器设置和检索值,但是如果我尝试使用 KVC(即 setValue: forKey: ),一切都会变糟,并说我的 StatTracker 类不符合 KVC:

valueForUndefinedKey:]:实体 StatTracker 不符合键“timesLauched”的键值编码。2010-05-18 15:55:08.573

这是触发它的代码:

不确定这对你们来说是否足够的代码,如果您确实需要更多,请告诉我您需要什么。

如果我可以使用 KVC,那就太好了,因为我可以将所有这些统计跟踪内容抽象到一个方法调用中,并为所讨论的值提供一个字符串参数。至少这是我希望在这里完成的。我现在实际上正在了解 KVC 的强大功能,但现在我只是想弄清楚如何让它发挥作用。

谢谢!

缺口

添加下面建议的代码后,输出是这样的:

对象:(实体:StatTracker;id:0x3e1e1b0;数据:) 2010-05-19 11:30:38.173 verses[29526:207] *** 由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[valueForUndefinedKey:] :实体 StatTracker 不符合键“timesLauched”的键值编码。2010-05-19 11:30:38.174 诗句[29526:207] 堆栈:(