问题标签 [kvc]

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 投票
1 回答
210 浏览

objective-c - 为什么我的简单 Cocoa 绑定不起作用?

Cocoa 绑定、KVC 和 KVO 开始让我头疼。我想要做的就是将 NSTextField 的值绑定到我的视图控制器的属性值。有人能告诉我哪里出错了吗?任何帮助将不胜感激。下面是我正在做的事情的简化版本。

MyViewController.h:

MyViewController.m:

0 投票
0 回答
542 浏览

objective-c - 为什么 valueForKeyPath 会抛出 NSInvalidArgumentException?

我正在调试别人的代码,这就是我在不知道这段代码做什么的情况下到达这一点的方式。

valueForKeyPath 抛出一个 NSInvalidArgumentException 并在给定以下代码的情况下使我的应用程序崩溃:

我注意到官方的 KVC 指南在参考 @distinctUnionOfObjects 运算符时这样说:

如果任何叶对象为 nil,则此运算符引发异常。

那么参考我的具体示例的叶子对象是什么?我如何追踪哪片叶子具体是零?

0 投票
0 回答
101 浏览

core-data - 在 NSManagedObject 的自定义类中使用点语法获取器是否可以?

一般来说......在 NSManagedObject 类中,在给定浮动动态属性的设置器之一中,是否可以将点语法获取器用于该设置器中同一 NSManagedObject 的其他浮动动态属性?或者我是否需要使用任何符合 KVC 标准的 CoreData 访问器我何时访问一个值,即使它来自与正在访问的值的实际 getter 不同的方法?我会假设以这种方式调用点语法会导致我的其他自定义访问器触发,这对我来说没问题,因为里面有适当的 KVC 原始访问器。但是我似乎遇到了奇怪的问题,点语法要么只是失败,要么似乎有不可预测的结果,我不确定是不是因为我以不安全的方式使用点语法,或者如果还有其他一些我还没有弄清楚的错误。

这是我正在谈论的代码示例:

0 投票
1 回答
174 浏览

cocoa - 为什么当 NSArrayController 绑定到数组时会自动调用 add/remove 方法?

我试图了解 NSArrayController 的工作原理......

  • 当我创建一个 NSMutableArray“employeeArray”来保存“Person”对象时。 在此处输入图像描述
  • 我在 GUI 中使用 NSArrayController 并与“employeeArray”绑定。 在此处输入图像描述
  • 我添加了两个按钮,用于在“employeeArray”中添加和删除“Person”对象。两个按钮都与接收到的 NSArrayController 的“add:”和“remove:”动作绑定。 在此处输入图像描述
  • 为了在“employeeArray”中添加/删除“Person”对象时做其他事情,我添加了两个方法:
    • (void)insertObject:(Person *)p inEmployeeArrayAtIndex:(NSUInteger)index;
    • (void)removeObjectFromEmployeeArrayAtIndex:(NSUInteger)index;

问题:

  1. 我没有做任何事情(写任何代码)让 NSArrayController 知道上面的两种方法,为什么当我点击添加/删除按钮时它们会自动调用?发生了什么?
  2. NSArrayController 使用什么添加/删除方法?
  3. NSArrayController 是否足够聪明以识别这些方法?如果我随机修改了方法名称,它会被正确调用吗?
0 投票
1 回答
264 浏览

ios - Collection operators valueForKeyPath returns nil

Below is sample code which I am using to test collection operators:

transactionAverage is always returning me nil. Looks like small mistake from my side, but not able to identify that.

0 投票
1 回答
132 浏览

objective-c - 使用 KVC 获取对象的属性列表

在这个SO post中,选择的答案使用下面的语法以这种方式从乘客列表中获取frequentFlyerNumbers 列表。

NSArray *frequentFlyerNumbers = someFlight.passengers.frequentFlyerNumbers;

鉴于乘客是一个数组并且编译器无法推断进入数组的类型,这怎么可能?

实施乘客时出现以下错误。

在“NSMutableArray *”类型的对象上找不到属性“frequentFlyerNumbers”

0 投票
3 回答
1235 浏览

ios - 循环遍历动态对象数组

我不太确定如何准确描述我想要做的事情 - 我能做的最好的就是提供一些代码作为示例:

所以我可能会这样称呼

我希望代码像我写的一样被执行

有没有办法获得这种行为?

0 投票
0 回答
33 浏览

objective-c - 如何检测是否使用 Key 或 KeyPath

我刚刚遇到了我正在尝试的问题

当我应该使用

作为快速修复,我这样做了。

这是处理这种情况的最佳方法吗?

0 投票
1 回答
879 浏览

ios - 核心数据:setPrimitiveValue:forKey: 行为真的很奇怪

这是一个谜:

我正在调用setPrimitiveValue:forKey:一个NSManagedObject. 关键是对象的合法、持久、建模属性。但是, setPrimitiveValue:forKey: 失败,通常为不同的任意属性设置值。setPrimitiveValue:forKey:文档说在调用未建模的密钥时会出现这种行为。因此,Core Data 似乎认为密钥未建模。

奇怪的部分:

当键被硬编码为字符串文字时,原始值确实设置成功。只有当键是变量时才会失败。keyPath我正在使用的变量恰好是从observeValueForKeyPath:ofObject:change:context:

keyPath变量与字符串文字相同。isEqual:返回 true 并且哈希值相等。keyPath变量的类型为__NSCFString。有谁知道为什么setPrimitiveValue:forKey:会有不同的行为?(此行为在 OS X 10.9.1 上)


提供更好信息的更新:

行为不端的键可追溯到从磁盘上的文件加载的字符串。下面的例子是一个孤立的案例。如果属性字符串“mainAttr”被写入磁盘并读回,则setPrimitiveValue:forKey:设置错误属性的值,而不是“mainAttr”。

核心数据对象:

-

0 投票
2 回答
1166 浏览

ios - 如何使用restkit获取一个简单的json字符串数组

我的问题是重复的

RestKit:如何获取一个简单的 JSON 字符串数组?

但是,虽然原作者发现答案很有帮助,但我仍然迷路了。这个问题有两个单独的参考资料,但都不足以帮助我(一个完整的初学者KVCRestKit

一个参考是here并给出了这个示例代码

应该是什么类?应该是 NSString 吗?或者这是否暗示我应该创建一个包装类,它有一个属性是 NSArray *?

@"someAttribute" 应该是什么?同样,这是否暗示一个包装类,在这种情况下 someAttribute 将是我的包装类上的属性名称,即 NSArray *?

另一个参考是here,虽然它显示了从数组中获取“包装类”,但包装类只有一个NSNumber,而不是数组。因此,尚不清楚如何将该示例转换为可用于获取整个数组的示例。

作为参考,服务器返回一个字符串数组,就像原始问题一样:[“string1”,“string2”,“string3”]。

更新

这是我尝试过的代码。我创建了一个包装类。

这是映射:

我在打电话getObjectsAtPathForRouteName

我得到的是CannedReponses预期的数组。然而,而不是NSString被放入响应属性中。我得到一个RKMappingSourceObject. 现在RKMappingSourceObject确实包含正确的字符串。

我将查看RestKit控制台中的日志记录,看看是否可以收集更多线索。

更新#2

正如blakewatters这里提到的,我在这个例子中没有做任何映射,可以绕过使用RestKit. 问题是我在服务层中编写的所有代码都在使用RestKit,并且我盲目地遵循所有调用的模式。对于这个电话,正确的答案可能是弄清楚如何AFNetworking直接访问。