2017-07-15 14 views
0

ListViewをカスタマイズしようとしているページが消滅すると、次のエラーが発生します。エラーは、私のオブザーバーは処分されていないと言います。Xamarinフォーム - iOSカスタムレンダラ - オブザーバの廃棄

public class ChatListViewRenderer : ListViewRenderer 
{ 
    private IDisposable _onContentSizeChangedObserver; 
    private IDisposable _onFrameChangedObserver; 

    protected override void OnElementChanged(ElementChangedEventArgs<ListView> e) 
    { 
     base.OnElementChanged(e); 
     if (Control == null) return; 

     _onContentSizeChangedObserver = Control.AddObserver(new NSString("contentSize"), NSKeyValueObservingOptions.OldNew, OnContentSizeChanged); 
     _onFrameChangedObserver = Control.AddObserver(new NSString("frame"), NSKeyValueObservingOptions.OldNew, OnFrameChanged); 
    } 


    protected override void Dispose(bool disposing) 
    { 
     _onContentSizeChangedObserver.Dispose(); 
     _onFrameChangedObserver.Dispose(); 
     base.Dispose(disposing); 
    } 
} 

UPDATE

私はListViewを含むページのPageRendererViewWillDisapear以内にしようとしたが、問題が残っています。

OnElementChanged
public override void ViewWillDisappear(bool animated) 
    { 
     base.ViewWillDisappear(animated); 

     var listRenderer = Platform.CreateRenderer(((MessagesPage)Element).MessagesList) as ChatListViewRenderer; 
     listRenderer._onContentSizeChangedObserver.Dispose(); 
     listRenderer._onFrameChangedObserver.Dispose(); 
    } 

答えて

0

が2回呼び出され - 配置されたときにコントロールが、その後に作成されたとき。

if(e.NewElement != null) 
     addobserver and do other stuff 
if(e.oldElement!=null) 
     remove observer and destroy everything you allocated 
関連する問題