问题标签 [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.
javascript - 通过 Javascript 中的 keyPath 访问属性?
我有
我真的很想像这样访问它:
实际上以更灵活的方式,例如:
是否有任何轻量级库或您可以建议的片段?这是 - https://github.com/martinvl/KVCObject - 太酷了,但这有点开销。
core-data - 将现有对象引用添加到不同的实体
我有一些名为 Word 的 NSManaged 对象,它们是它们自己的集合。单词对象及其相关属性的预填充列表。
我有第二个名为 WordSets 的 NSManaged 对象,它包含部分 Word 对象列表。(一对多)
我试图了解如何将 WordSets 链接到预先存在的 Word 对象。
我有一个 tableView,我可以在其中选择一个单词对象。我有一个添加按钮,它调用以下代码的出口......
NSLog,选择第二个表视图项并调用出口后:
我在这里并没有真正得到的是我只想/需要添加对对象的引用。
我既有表选择,也有一个似乎被某种方式解释为 NSArray 的对象的骨架,我似乎无法访问。
Object WordSets 有一个 1-many with word,反之亦然,但我似乎无法获得对象的句柄以添加关系。
我猜我在 KVC 领域做错了什么。NSlog 有对象 ID,所以 FWIG 的任务是获取 _wordArrayController.selectedObjects 中的数据,获取所选对象的句柄,然后将该对象添加到 WordSets 实例,即:
这是怎么做到的???
ios - removeAllObjects 上的 KVO 分别为每个项目触发 NSKeyValueChangeRemoval
我正在看一个NSArray
property
with KVO
。我已经KVC
像在这篇文章中那样实现了,而且我还实现了大多数KVC
数组访问器。为了改变它,我使用mutableArrayValueForKey
. 它工作正常,除了两个问题:
当我打电话时
removeAllObjects
,我会为每个删除的项目NSKeyValueChangeRemoval
获得更改。我只想收到一个通知,其中包含所有已删除的索引。NSKeyValueChangeRemoval
同样,当我打电话时
addObjectsFromArray:
,我会得到NSKeyValueChangeInsertion
每个添加的项目。我只想收到一个NSKeyValueChangeInsertion
包含所有添加索引的通知。
请注意,我确实实现了 KVC 方法remove<Key>ItemsAtIndexes:
和insert<Key>Items:atIndexes:
. 虽然他们没有被调用。
我使用以下解决方法:
有没有办法直接使用removeAllObjects
而不addObjectsFromArray:
需要上述解决方法?
ios - 如何检查 id 是否指向 CGRect?
假设我们有:
我该如何决定?我应该把 id 投射到什么东西上吗?
ios - 嵌套 NSArray 过滤
我需要获取同一类的自定义对象集合的属性的最大值。对象存储在一个 NSArray 中,而该属性恰好是另一个 NSArray 的数字。
让我详细解释一下:
CMData 是一个类,它在特定时刻对一组可以具有不同值的不同通道的样本进行建模。
(我已经剥离了与问题无关的类的其他属性)
例如,sample[1970] 可能是:
其中,analogChannelData 中的每个元素 [i] 表示时间戳 970800 的特定通道 i 的值
现在我想获得通道 31 的所有 4000 个样本的最大值。我使用以下代码:
我想通过 NSPredcicate 过滤器替换此编程结构或使用 valueForKeyPath: 来获得我需要的最大数据。
任何人都知道如何在没有 for 循环的情况下做到这一点?只使用 NSPredicates 和/或 valueForKeyPath?
非常感谢您的帮助。
更新 1
最后,我将 for 循环版本与 keyPath 版本进行了对比(参见接受的答案),它运行得更快,因此最好使用 for 循环。回顾我的算法课程中的一些教训,我实现了一个更快的版本,它不需要数组来存储值。我只是迭代选定的通道,并在每次迭代中选择最大值。这是迄今为止最快的版本。
所以:
- 版本 1:for 循环(参见上面的代码)
- 版本 2:具有自定义属性的版本(请参阅 Marcus 的选定答案,更新 2)
- 版本 3:新代码
版本 3 的代码:
表现:
在 iOS 模拟器中进行 20.000 次迭代后:
- 版本 1:12.2722 秒。
- 版本 2:21.0149 秒。
- 版本 3:5.6501 秒。
决定很明确。我将使用第三个版本。
更新 2
经过更多研究,我现在很清楚 KVC 不适用于内部数组中的单个元素。请参阅以下链接:KVC with NSArrays of NSArrays and Collection Accessor Patterns for To-Many Properties
无论如何,因为我想计算元素的最大值,所以迭代数组比使用一些技巧来使 KVC 工作更好。
ios - 将 NSDictionary 映射到 NSObject 子类
我正在开发 cline-server 应用程序。我从服务器获取 JSON 对象作为响应,然后将 JSON 转换为 NSDictionary。现在我需要将 NSDictionary 映射到自定义数据对象。所以我创建了 BasicDataObject 类,它具有:
每个数据对象都是这个类的一个子类,所以它可以从 NSDictionary 初始化。如果某些数据对象子类需要一些自定义初始化,我将覆盖它:
这是正确/好的方法,还是我需要添加更多内容?
objective-c - KVO:如何在 setValue 内调用 setValue... 而不会进入无限循环?
我正在为 Mac OS X 编写一个程序,遇到了以下问题:
在我的一个类中,有许多布尔属性,可以使用 KVO 访问(即通过valueForKey:
andsetValue:forKey:
方法。它们的数量可能会增长。
每次我设置其中一个属性时,我都需要更改上次修改的日期,这也是一个属性。所以我最终不得不为每个新属性编写一个新的设置器。
我想做的是重写该方法,以便它设置相应的属性和最后一次修改的日期,但如果没有 a) 将s 添加到方法setValue:forKey:
中,我无法弄清楚如何做到这一点(检查键名并设置对应的);b) 不会陷入无限循环。if
setValue:forKey:
_variable
有没有办法做到这一点?或者这完全是个坏主意?
ios - 使用键值编码的核心数据验证
我创建了一个核心数据模型并创建了一个类别类,其中包含用于更新和删除数据的方法。我正在尝试向该类添加验证方法并尝试使用 KVC 但有点挣扎。
我的问题是,我的验证方法仅在我实际保存上下文 [context save:&internalError] 时触发,它们工作正常,但保存过程也完成。我的问题是,什么时候触发验证可以在保存之前触发,还是我这样做完全错误?
我的代码:
ios - 包含关系的 managedobject keypath 观察者的 KVO 相关异常
我在 viewController 的 init 方法中观察到了一个关键路径。( event 是这个 viewController 的一个属性
event 是一个托管对象,它与 location 是 1-1 的关系。(每个事件有 1 个位置对象,反之亦然)
奇怪的是,如果在将事件对象设置为属性 viewController.event 之前没有触发“位置”关系,那么我会收到以下错误:
正如我所说,如果我在将托管对象设置为 viewController 的属性之前添加以下行,则此错误已修复,在这种情况下它不会崩溃,并且可以正常工作
显然,这是一种解决方法。有关纠正此问题的任何想法?
编辑
我认为也许使用我用于setRelationshipKeyPathsForPrefetching
@ "location" 键路径的那个可能是一个更漂亮的解决该错误的方法,但奇怪的是,这个错误目前已经消失了。我唯一做的就是进一步开发应用程序,这意味着我确实重新安装了几次应用程序。因此,当数据库再次变大时,它可能会重新出现。如果发生这种情况我会更新NSFetchRequest
NSFetchedResultsController
ios - How to use with KVC accessors for a mutable array Objective-C
I'm trying to make a KVC compliant mutable array to detect changes in the array.
In my header file I have:
#xA;The typical accessor methods for KVC as shown on the Docs. When I implement the accessor methods in the main file, these following functions dont recognize the calls to the selectors:
#xA;The error is "no visible @interface for NSarray" declares selector:'' for each of the selectors in the function here. I am confused and unsure why these selectors do not exist? Help is appreciated. The other 4 functions in the header file are ok.