问题标签 [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 投票
8 回答
7089 浏览

javascript - 通过 Javascript 中的 keyPath 访问属性?

我有

我真的很想像这样访问它:

实际上以更灵活的方式,例如:


是否有任何轻量级库或您可以建议的片段?这是 - https://github.com/martinvl/KVCObject - 太酷了,但这有点开销。

0 投票
1 回答
153 浏览

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 实例,即:

这是怎么做到的???

0 投票
1 回答
329 浏览

ios - removeAllObjects 上的 KVO 分别为每个项目触发 NSKeyValueChangeRemoval

我正在看一个NSArray propertywith KVO。我已经KVC像在这篇文章中那样实现了,而且我还实现了大多数KVC数组访问器。为了改变它,我使用mutableArrayValueForKey. 它工作正常,除了两个问题:

  1. 当我打电话时removeAllObjects,我会为每个删除的项目NSKeyValueChangeRemoval获得更改。我只想收到一个通知,其中包含所有已删除的索引。NSKeyValueChangeRemoval

  2. 同样,当我打电话时addObjectsFromArray:,我会得到NSKeyValueChangeInsertion每个添加的项目。我只想收到一个NSKeyValueChangeInsertion包含所有添加索引的通知。


请注意,我确实实现了 KVC 方法remove<Key>ItemsAtIndexes:insert<Key>Items:atIndexes:. 虽然他们没有被调用。

我使用以下解决方法:

有没有办法直接使用removeAllObjects而不addObjectsFromArray:需要上述解决方法?

0 投票
3 回答
1152 浏览

ios - 如何检查 id 是否指向 CGRect?

假设我们有:

我该如何决定?我应该把 id 投射到什么东西上吗?

0 投票
3 回答
1156 浏览

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 工作更好。

0 投票
1 回答
1873 浏览

ios - 将 NSDictionary 映射到 NSObject 子类

我正在开发 cline-server 应用程序。我从服务器获取 JSON 对象作为响应,然后将 JSON 转换为 NSDictionary。现在我需要将 NSDictionary 映射到自定义数据对象。所以我创建了 BasicDataObject 类,它具有:

每个数据对象都是这个类的一个子类,所以它可以从 NSDictionary 初始化。如果某些数据对象子类需要一些自定义初始化,我将覆盖它:

这是正确/好的方法,还是我需要添加更多内容?

0 投票
1 回答
1253 浏览

objective-c - KVO:如何在 setValue 内调用 setValue... 而不会进入无限循环?

我正在为 Mac OS X 编写一个程序,遇到了以下问题:

在我的一个类中,有许多布尔属性,可以使用 KVO 访问(即通过valueForKey:andsetValue:forKey:方法。它们的数量可能会增长。

每次我设置其中一个属性时,我都需要更改上次修改的日期,这也是一个属性。所以我最终不得不为每个新属性编写一个新的设置器。

我想做的是重写该方法,以便它设置相应的属性和最后一次修改的日期,但如果没有 a) 将s 添加到方法setValue:forKey:中,我无法弄清楚如何做到这一点(检查键名并设置对应的);b) 不会陷入无限循环。ifsetValue:forKey:_variable

有没有办法做到这一点?或者这完全是个坏主意?

0 投票
1 回答
1000 浏览

ios - 使用键值编码的核心数据验证

我创建了一个核心数据模型并创建了一个类别类,其中包含用于更新和删除数据的方法。我正在尝试向该类添加验证方法并尝试使用 KVC 但有点挣扎。

我的问题是,我的验证方法仅在我实际保存上下文 [context save:&internalError] 时触发,它们工作正常,但保存过程也完成。我的问题是,什么时候触发验证可以在保存之前触发,还是我这样做完全错误?

我的代码:

0 投票
0 回答
360 浏览

ios - 包含关系的 managedobject keypath 观察者的 KVO 相关异常

我在 viewController 的 init 方法中观察到了一个关键路径。( event 是这个 viewController 的一个属性

event 是一个托管对象,它与 location 是 1-1 的关系。(每个事件有 1 个位置对象,反之亦然)

奇怪的是,如果在将事件对象设置为属性 viewController.event 之前没有触发“位置”关系,那么我会收到以下错误:

正如我所说,如果我在将托管对象设置为 viewController 的属性之前添加以下行,则此错误已修复,在这种情况下它不会崩溃,并且可以正常工作

显然,这是一种解决方法。有关纠正此问题的任何想法?

编辑

我认为也许使用我用于setRelationshipKeyPathsForPrefetching@ "location" 键路径的那个可能是一个更漂亮的解决该错误的方法,但奇怪的是,这个错误目前已经消失了。我唯一做的就是进一步开发应用程序,这意味着我确实重新安装了几次应用程序。因此,当数据库再次变大时,它可能会重新出现。如果发生这种情况我会更新NSFetchRequestNSFetchedResultsController

0 投票
1 回答
527 浏览

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.