在我的自定义内UITableViewCell
我正在做这样的事情。
-(void)checkHeight
{
if (self.frame.size.height < self.expandedHeight) {
self.lblReasontitle.hidden=YES;
}
else
{
self.lblReasontitle.hidden=NO;
}
}
-(void)watchFrameChanges
{
if (!isObserving) {
[[NSNotificationCenter defaultCenter] addObserver:self forKeyPath:@"frame" options: (NSKeyValueObservingOptionNew |NSKeyValueObservingOptionInitial) context:nil];
isObserving=true;
}
}
-(void)ignoreFrameChanges
{
if (isObserving) {
[[NSNotificationCenter defaultCenter] removeObserver:self forKeyPath:@"frame"];
}
}
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
{
if ([keyPath isEqualToString:@"frame"]) {
[self checkHeight];
}
}
但我得到了这个例外。
因未捕获的异常而终止应用程序NSUnknownKeyException,原因:[addObserver:forKeyPath:@&#34; frame&#34; options:5 context:0x0]被发送到&#34; frame&#34;的符合KVC标准的对象。属性。
我不知道那个异常是什么,我怎么能解决它。 请帮我。 感谢
答案 0 :(得分:1)
从上面的代码我想你想做一对一的沟通。如果是这样的话,那就是KVO,而不是NSNotification。
替换像这样的代码,
-(void)checkHeight
{
if (self.frame.size.height < self.expandedHeight) {
self.lblReasontitle.hidden=YES;
}
else
{
self.lblReasontitle.hidden=NO;
}
}
-(void)watchFrameChanges
{
if (!isObserving) {
[self addObserver:self forKeyPath:@"frame" options: (NSKeyValueObservingOptionNew |NSKeyValueObservingOptionInitial) context:nil];
isObserving=true;
}
}
-(void)ignoreFrameChanges
{
if (isObserving) {
[self removeObserver:self forKeyPath:@"frame"];
}
}
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
{
if ([keyPath isEqualToString:@"frame"]) {
[self checkHeight];
}
}
答案 1 :(得分:0)
UIKit元素默认情况下不符合KVO标准 - 直到记录为止。因此,您将获得此异常。尝试注册一些与帧相关的值,它应该可以工作。