2012-08-24 4 views
0

내 코드에서 이상한 버그가 발견되었지만 원할 때마다 재현 할 수 없습니다. 때때로 다음과 같은 키 패스 오류 내 아이 패드 응용 프로그램 충돌 : 나는 그것을 연결할 경우 여기ios : observeValueForKeyPath 이후의 충돌

-(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]; 
}  

과 : 여기

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}"; 
} 

는 키 패스 관찰을 처리하는 코드는

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

'선택됨'은 UIObject 유형입니다.

내 코드에서 UIWebLayer를 사용하지 않습니다. UITextView에서 UIWebLayer에 대한 objet 변이가있는 이유는 무엇입니까? 나는 무엇을 짜내고 있습니까?

+0

dealloc에서 textview 등록을 잊어 버리셨습니까? – borrrden

+0

ARC를 사용하면서 textview가 실제로 등록 해제되지 않았습니다. 더 이상 필요가 없으면 다음과 같이하면됩니다. [tv removeFromSuperview]; tv = nil; 인 스트 루먼트는 좀비를 감지하지 못했지만 이상한 텍스트 뷰가 여전히 어딘가에 있다면 아직 좀비가 아닙니다. – Diwann

답변

0

는 나는이 게시물에 해결책을 발견 할 수 있습니다 생각 : https://stackoverflow.com/a/4134583/1128754

나는 "removeFromSuperview"전에 "removeObserver"를 추가했다.

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

이 시도 :

당신의 .H 파일 즉 @ 인터페이스 파일에서 UITextView * TV를 선언; 그런 다음 어디에서이 코드를 작성해야합니까?

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

이 방법은 항상 당신은 어떤 메모리 손상 문제에 갇혀 점점 멀리 도움이됩니다. 나는 단지 그것이 당신을 위해서 속임수가되기를 바랍니다. 행운을 빕니다!

+0

ARC를 사용 중이며 수동으로 오브젝트를 릴리즈 할 수 없습니다. 그러나 다시 할당하기 전에이 코드를 할당하지 않았으므로 도움이 될 수 있기를 바랍니다. – Diwann

관련 문제