|
5
|
| Ben Packard Ross Knipe · 技术社区 · 16 年前 |
|
1
1
首先,它是
使用自己的setter是正确的方法,但使用的方法不正确。它可以工作,但是你写的代码仍然比你需要的要多。
您应该做的是实现set访问器,例如
只要你跟着
the KVC-compliant accessor formats
,您将免费获得kvo通知,就像您使用
这比
我也更喜欢这个解决方案
|
|
|
2
7
我不知道它是否被视为bug,但是addobject:(和removeobject:atindex:)不生成kvo通知,这就是为什么数组控制器/表视图没有得到更新的原因。要符合kvo,请使用mutableArrayValueForkey: 例子:
您还需要实现insertObject:insatedplayersatindex:因为默认的kvo方法非常慢(它们创建了一个全新的数组,将对象添加到该数组,并将原始数组设置为新的数组--效率非常低)
注意,当数组控制器添加对象时也会调用这个方法,因此它也是一个很好的钩子,可以考虑注册一个撤消操作等。 |
|
|
3
1
我没有试过,所以我不能说它有效,但是你不会通过打电话得到kvo通知吗?
在阵列控制器上? |
|
|
4
1
神奇的钥匙 Key Value Observing 是在 Key Value Compliance . 您最初使用的方法名为addObject:它只与“无序访问器模式”关联,而您的属性是一个索引属性(nsmutableArray)。当您将属性更改为无序属性(nsmutableset)时,它起作用。将nsarray或nsmutablearray视为索引属性,nsset或nsmutableset视为无序属性。你真的必须仔细阅读这一部分,以知道什么是必须的,使魔术发生… Key-Value-Compliance .对于不同的类别有一些“必需”的方法,即使您不打算使用它们。 |
|
|
5
0
总的来说,我会这样做:
或者:
后一种选择会导致自动调用1下面列出的函数。第一选择 应该 表现得更好。 |
|
|
KanKonga · 为什么这个swift代码没有显示在文本字段中? 2 年前 |
|
|
Community wiki · 目标的Xcode构建阶段的自动更新? 2 年前 |
|
|
Anton Timonin · 如何正确地将动态pod库更改为静态? 3 年前 |
|
|
Igor · 在OSX中,捆绑包的用户首选项在哪里? 3 年前 |
|
|
narner · 从Swift包创建Cocoapods框架 3 年前 |