问题标签 [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.
objective-c - 为什么我的简单 Cocoa 绑定不起作用?
Cocoa 绑定、KVC 和 KVO 开始让我头疼。我想要做的就是将 NSTextField 的值绑定到我的视图控制器的属性值。有人能告诉我哪里出错了吗?任何帮助将不胜感激。下面是我正在做的事情的简化版本。
MyViewController.h:
MyViewController.m:
objective-c - 为什么 valueForKeyPath 会抛出 NSInvalidArgumentException?
我正在调试别人的代码,这就是我在不知道这段代码做什么的情况下到达这一点的方式。
valueForKeyPath 抛出一个 NSInvalidArgumentException 并在给定以下代码的情况下使我的应用程序崩溃:
我注意到官方的 KVC 指南在参考 @distinctUnionOfObjects 运算符时这样说:
如果任何叶对象为 nil,则此运算符引发异常。
那么参考我的具体示例的叶子对象是什么?我如何追踪哪片叶子具体是零?
core-data - 在 NSManagedObject 的自定义类中使用点语法获取器是否可以?
一般来说......在 NSManagedObject 类中,在给定浮动动态属性的设置器之一中,是否可以将点语法获取器用于该设置器中同一 NSManagedObject 的其他浮动动态属性?或者我是否需要使用任何符合 KVC 标准的 CoreData 访问器我何时访问一个值,即使它来自与正在访问的值的实际 getter 不同的方法?我会假设以这种方式调用点语法会导致我的其他自定义访问器触发,这对我来说没问题,因为里面有适当的 KVC 原始访问器。但是我似乎遇到了奇怪的问题,点语法要么只是失败,要么似乎有不可预测的结果,我不确定是不是因为我以不安全的方式使用点语法,或者如果还有其他一些我还没有弄清楚的错误。
这是我正在谈论的代码示例:
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;
问题:
- 我没有做任何事情(写任何代码)让 NSArrayController 知道上面的两种方法,为什么当我点击添加/删除按钮时它们会自动调用?发生了什么?
- NSArrayController 使用什么添加/删除方法?
- NSArrayController 是否足够聪明以识别这些方法?如果我随机修改了方法名称,它会被正确调用吗?
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.
objective-c - 使用 KVC 获取对象的属性列表
在这个SO post中,选择的答案使用下面的语法以这种方式从乘客列表中获取frequentFlyerNumbers 列表。
NSArray *frequentFlyerNumbers = someFlight.passengers.frequentFlyerNumbers;
鉴于乘客是一个数组并且编译器无法推断进入数组的类型,这怎么可能?
实施乘客时出现以下错误。
在“NSMutableArray *”类型的对象上找不到属性“frequentFlyerNumbers”
ios - 循环遍历动态对象数组
我不太确定如何准确描述我想要做的事情 - 我能做的最好的就是提供一些代码作为示例:
所以我可能会这样称呼
我希望代码像我写的一样被执行
有没有办法获得这种行为?
objective-c - 如何检测是否使用 Key 或 KeyPath
我刚刚遇到了我正在尝试的问题
当我应该使用
作为快速修复,我这样做了。
这是处理这种情况的最佳方法吗?
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”。
核心数据对象:
-
ios - 如何使用restkit获取一个简单的json字符串数组
我的问题是重复的
但是,虽然原作者发现答案很有帮助,但我仍然迷路了。这个问题有两个单独的参考资料,但都不足以帮助我(一个完整的初学者KVC
)RestKit
。
一个参考是here并给出了这个示例代码
应该是什么类?应该是 NSString 吗?或者这是否暗示我应该创建一个包装类,它有一个属性是 NSArray *?
@"someAttribute" 应该是什么?同样,这是否暗示一个包装类,在这种情况下 someAttribute 将是我的包装类上的属性名称,即 NSArray *?
另一个参考是here,虽然它显示了从数组中获取“包装类”,但包装类只有一个NSNumber,而不是数组。因此,尚不清楚如何将该示例转换为可用于获取整个数组的示例。
作为参考,服务器返回一个字符串数组,就像原始问题一样:[“string1”,“string2”,“string3”]。
更新
这是我尝试过的代码。我创建了一个包装类。
这是映射:
我在打电话getObjectsAtPathForRouteName
我得到的是CannedReponses
预期的数组。然而,而不是NSString
被放入响应属性中。我得到一个RKMappingSourceObject
. 现在RKMappingSourceObject
确实包含正确的字符串。
我将查看RestKit
控制台中的日志记录,看看是否可以收集更多线索。
更新#2
正如blakewatters这里提到的,我在这个例子中没有做任何映射,可以绕过使用RestKit
. 问题是我在服务层中编写的所有代码都在使用RestKit
,并且我盲目地遵循所有调用的模式。对于这个电话,正确的答案可能是弄清楚如何AFNetworking
直接访问。