问题标签 [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.
ios - mutableArrayValueForKey NSMutableArray 在删除对象时崩溃
我正在使用以下代码崩溃。self.items
是具有字符串类型属性的 of NSArray
:NSManagedObjects
"id"
这是崩溃消息:
在调试器中打印出来表明这allID
是 aNSKeyValueSlowMutableArray
而不是__NSArrayM
常规的NSMutableArray
.
所以我把它改成了这个,它可以工作:
NSMutableArray *allIDs = [[self.items valueForKey:@"id"] mutableCopy];
这两个调用之间有什么区别会使前者崩溃但后者起作用?我怀疑这与 KVO 和代理集合有关,但不太了解。
ios - valueForKeyPath 可以计算总和的最大值吗?
我有以下 Objective-C 类:
给定NSArray
of GraphDataPoint
,我知道如何计算value
最大值
现在我想更改value
为一个数组values
:
是否有类似的方法来计算using中每个属性之和的最大值?(我知道我可以编写一个嵌套循环来手动解决它。)value
GraphDataPoint
NSArray
valueForKeyPath
ios - 如果我实现了一个执行验证的 setXXX 方法会发生什么?
关于确保 KVC 合规性
该文件说:
您对该-set<Key>:
方法的实现不应执行验证。-validate<Key>:error:
如果验证适用于密钥,您的类应该实现。
如果我实现执行验证的 setXXX 方法,就会发生这种情况
使用kvo会导致性能问题吗?
objective-c - KVC 如何处理速度和错误?
我一直在阅读有关 KVC 和 Cocoa Scripting 的内容,以及如何为此使用属性。我有一个模型类,但元素/属性数据必须从 Internet 获得。但是属性和 KVC 的设计看起来像是假设快速和内存检索,而网络调用可能很慢和/或容易出错。这些如何调和?
为了速度,我们只是说“去他妈的”并发布一个等待图标吗?(当然,我们应该保持多线程,这样 UI 在我们等待时不会停止。)
如果您的属性应该始终可用,我们可以将其设置为nil
资源调用出错时。但是我们没有办法得到细节。更糟糕的是支持“缺失值”的属性,然后nil
将表示它,我们将没有备用状态用于错误。
尽管 Apple 事件支持错误处理,但我无法使用它,因为在我可能会产生错误的模型调用和 Apple 事件之间,KVC 层会将错误放到地板上(被遗忘)。Scripting Bridge API 发现了这个问题,因为它的设计者添加了一个秘密协议来处理错误。
我错了吗?有没有办法处理基于 KVC 的设计的错误?
附录
我忘了提到例外。Objective-C 现在支持它们,但我读到的关于它们的信息很少暗示它们是用于灾难性的“而不是直接崩溃”的,而不是用于像 C++ 中那样的常规错误处理。除此之外,它们可能在这里有用......
cocoa - Model Key Path With Multiple Properties
Here, I'm using an NSArrayController
to bind properties from Core Data entities into the value of text view table cells.
What syntax do I use to access multiple properties of the entity in the Model Key Path?
Example as a format string: @"%@, %@", lastName, firstName;
objective-c - 在 Objective-C 中声明集合访问器方法是必要的吗?
我今天有一个快速的。假设我有一个名为BSDHistoryManager
. 它是一个简单的状态历史记录器,就像在 Web 浏览器中一样(又名History
对象 [ window.history
])。以下是 .h/m 文件的简化示例:
BSDHistoryManager.h
BSDHistoryManager.m
正如你所看到的,我在内部有一个标准的可变集合,当使用 getter 访问它时会复制它,这样内部就不会被弄乱。此时,我想添加一些公共访问器方法,例如-addState:
,-removeState:
等。例如,我喜欢像这样制作自己的访问器:
但是,我也想定义 KVC 方法。你知道,看起来像这样的那些:
现在我两者都有了,这很酷,但我希望我的类界面美观整洁,因此更易于阅读和理解。我的问题是:在实现KVC 访问器模式时,我是否需要声明这些方法,还是仅通过实现这些方法来“免费”获得 KVC 合规性?或者更好的问题是:如果我制作自己的自定义命名方法,我什至需要实现 KVC 方法吗?
希望这是有道理的,但如果没有,我会尝试更好地解释它。谢谢阅读!
objective-c - 使用超类的设置器时未发送 KVO 通知
我有一个定义属性的 ClassA:
该实现不会覆盖访问器。
ClassB 会覆盖 setter 来做一些额外的工作:
在 ClassB 的另一种方法中,我尝试通过超级设置器设置此属性,以跳过额外的工作:
当我这样做时,不会发送该属性的 KVO 通知。如果我做同样的事情,但使用self
,KVO 通知按预期工作:
这里发生了什么?这是预期的行为吗?我找不到任何可以这么说的东西。
core-data - 2 MOC之间的Core Data“Deep Copy”,处理To-Many关系,使用KVC集合代理对象
我正在尝试将托管对象从源持久存储到现有持久存储执行“深度复制”。借用任务代码以在目标上下文中建立多对多关系。完整的代码在这里
我的困惑在于下面的方法
我的问题是,之后
,这是在“集合代理对象”(由mutableSetValueForKey:调用产生)上执行的,并且没有从此方法返回结果(明确地通过参数或返回值)
,如何确保在目标上下文中创建了一个 NSMutableSet(由复制相关对象组成)?或者我永远不需要在目标上下文中引用此类“复制集”?目标上下文中的对象图是否可以通过使用通过 KVC 实现的“集合代理对象”围绕“复制对象”(代表“多对多”关系的 ONE 端)神奇地建立?
ios - NSMutableDictionary setValue:forUndefinedKey
我正在开发一个 iOS 应用程序。我有一个扩展 NSObject 的类,它定义了 1 个属性
我收到这个错误。 *由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[setValue:forUndefinedKey:]:此类与键 myUndefinedKey 的键值编码不兼容。”
我过去曾将 NSMutableDictionary 用于 kvc、kvo。是的,我看到该类不符合 kvc。
macos - MKMapAnnotationManager 不移除自己作为 MKAnnotation 的观察者
我仍在努力,但认为值得一问:
我有一个符合MKAnnotation
协议的类,称为AMAnnotation
. 这个类还实现了setCoordinate:
我可以成功地将注释添加到地图中,并且可以调用setCoordinate:
并且图钉将在地图上移动。但是有一个问题。有时,当地图被释放时,程序会暂停NSKVODeallocateBreak
并显示以下消息:
我自己没有添加任何观察者,所以我覆盖了我AMAnnotation
班级的 KVO 方法。事实证明,每次setCoordinate:
在将注释添加到地图后调用,我都会看到以下内容:
现在,我不知道是什么_original_setCoordinate:
,谷歌没有帮助。它看起来像MKMapAnnotationManager
重新添加自己作为观察者,但并没有删除自己。
有时当地图被释放时,我看到它会多次删除自己。但其他时候根本没有,这是警告出现的时候。
有人对此有解释吗?谢谢。