最近项目需求,要使用kvo,自己想的是来手动实现,自己写set方法,这样可以避免不必要的刷新。
我的写法是:
- (void)setAge:(int)age {
if(_age == age) return;
[self willChangeValueForKey:key];
_age = age;
[self didChangeValueForKey:key];
}
然后调用这个方法来设置新的数据。可是一直在这块报错,而且错误居然是libc++abi.dylib: handler threw exception。完全不知道从何下手。
苦寻无果的情况下,想到了这么一个调错方法:
@try {
}
@catch (NSException *exception) {
}
@finally {
}
把set语句放进try块里,然后在catch里打印出exception,果然起作用了。
最后发现是key的问题,kvo中的key,必须和对外声明的属性一致,也就是说key必须是@“age“。