检测是否已修改对象的至少一个属性

时间:2015-02-23 12:55:13

标签: ios objective-c key-value-observing reactive-cocoa kvc

我有许多字符串和可变数组的类。所有这些对象都代表表单数据。因此,如果我修改文本字段或将新照片添加到数组中,我会将此数据保存在对象的属性中。

如何创建验证器,以检查是否有某些属性已更改。

例如我向阵列添加了一些照片。然后我保存它。当我再次重新打开此屏幕时,我会看到已保存的照片,但现在我想添加新照片。

我向阵列添加新照片后的初始状态和状态将有所不同,我想跟踪它。

我在这里看到的最简单的方法是保存所有对象的当前状态,然后将其与新的统计数据进行比较。

假设我有下一个变量:

NSString *name;
NSString *lastName;
NSMutableArray *photos;

我可以使用例如KVC来检测某个对象是否被修改,但它适用于例如数组。因此,如果数组被修改,我们可以假设数据已被更改。但是,例如,如果我的属性名称有字符串@“Alex”然后我再次从文本字段放入字符串@“Alex”,我可以将它与之前的状态和当前状态进行比较,并得出结论,如果字符串将是状态被更改不同。这是对的吗?

1 个答案:

答案 0 :(得分:3)

  1. 您可以尝试Method Swizzling,例如:http://nshipster.com/method-swizzling/。挂钩是否调用set方法。

  2. 您可以使用KVC或代表通知更改。

  3. 您可以使用immutable object确保您的对象不会被更改,然后在创建时挂钩。