2014-09-30 3 views
-1

저는 Xamarin iOS를 사용하고 있습니다.UISearchDisplayController가 클래스 변수 여야하는 이유는 무엇입니까?

ViewDidLoad에서 나는 인스턴스화하고있어 내 UISearchBar, UISearchDisplayController, UISearchDisplayDelegateUITableViewSource. 따라서 나는 UISearchDisplayController 클래스 변수를 사용하고 있습니다. 나는 단지 ViewDidLoad에 그것을 사용했기 때문에 UISearchDisplayController에 대한 클래스 변수를 로컬 변수로 옮겼습니다.

지금 이상한 일이 일어났다 :

  • 검색이 더 이상 일을하지 않았다. 나의 입력에 관계없이 아무것도 바뀌지 않았다.
  • 또한 탐색 모음이 표준 동작이므로 탐색 모음으로 이동하지 않았습니다.

이제 변경 사항을 되 돌리면 다시 작동합니다. 내 코드를 확인한 결과이 코드와 다른 점은 없습니다.

그러나 왜 UISearchDisplayController을 클래스 변수로만 사용할 수 있습니까?

편집 :

@class 변수 :

namespace MyApp 
{ 
    partial class MyTableListController : UITableViewController 
    { 
     // class variable 
     private UISearchDisplayController searchController; 

     public MyTableListController (IntPtr handle) : base (handle) 
     { 
      // do some init 
     } 

     #region View lifecycle 

     public override void ViewDidLoad(){ 
      // .. 
     } 
    } 
} 

컨트롤러 만 전체 클래스 (예를 들어 클래스 변수)에서 사용할 수 있어야하므로 ViewDidLoad에서 사용하고 있지 않은 것으로 보인다.

+0

'클래스 변수'란 정확히 무엇입니까? 명확한 코드를 게시하십시오. 일부 언어에서는 정적 필드를 의미합니다. –

+0

@HenkHolterman : 질문을 편집했습니다. – testing

+2

_class_ 변수는 공식적으로 C#에서 _field_라고 불립니다. –

답변

2

검색 컨트롤러를 메서드 변수로 만들면 메서드가 완료되면 가비지 수집기에서 값을 수집 할 수 있습니다.

사용중인 경우 검색 컨트롤러에 대한 참조를 유지해야합니다.

+0

이것은 전체 답이 될 수 없습니다. –

+0

@HenkHolterman : 나는 따라 올 것 같지 않습니다. 너는 무엇을 놓치고 있니? –

+0

컨트롤러가 특수 xamarin 일 수도 있지만 일반적으로 참조를 유지하면서 검색 (검색)을 수행 할 수는 없습니다. –

관련 문제