繁体   English   中英

ios:observeValueForKeyPath之后崩溃

[英]ios : crash after observeValueForKeyPath

我在代码中发现了一个奇怪的错误,但是我想在任何时候都无法重现。 有时,我的iPad应用程序崩溃并出现以下密钥路径错误:

Keypath contentSize changed 
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '<UIWebDocumentView: 0x1c9fce00; frame = (0 0; 1034 75); text = 'coucou'; opaque = NO; userInteractionEnabled = NO; layer = <UIWebLayer: 0x1daa9760>>: An -observeValueForKeyPath:ofObject:change:context: message was received but not handled.
Key path: contentSize
Observed object: <UITextView: 0x1da83e60; frame = (32 32; 1034 198); text = 'coucou'; layer = <CALayer: 0x1dad2650>; contentOffset: {0, -62}>
Change: {
kind = 1;
new = "NSSize: {1034, 75}";
}

这是处理键路径观察的代码:

-(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
{
if (object != textViewCurrentlyEditing)
    return;
NSLog(@"Keypath %@ changed", keyPath);
UITextView *tv = object;
UIObject *selected = (__bridge UIObject *)context;
[self updateTextViewAlign:tv forObject:selected];
}    

这是我附加的位置:

UITextView *tv = [[UITextView alloc] initWithFrame:button.frame]; 
[tv addObserver:self forKeyPath:@"contentSize" options:(NSKeyValueObservingOptionNew) context:(void *)selected];
textViewCurrentlyEditing = tv;

“选定”为UIObject类型。

我不在代码中的任何地方使用UIWebLayer。 为什么从UITextView到UIWebLayer会有对象突变? 我在干什么?

尝试这个:

在您的.h文件(即@interface文件)中,声明UITextView * tv; 然后在需要的地方编写此代码。

if(tv)[tv release];
tv = [[UITextView alloc] initWithFrame:button.frame]; 

此方法将始终帮助您避免陷入任何内存损坏问题。 我只是希望它能帮到您。 祝好运!

我想我可能已经找到了这篇文章的解决方案: https : //stackoverflow.com/a/4134583/1128754

我在“ removeFromSuperview”之前添加了“ removeObserver”。

    [tv removeObserver:self forKeyPath:@"contentSize"];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM