2014-01-25 3 views
0

우리는 libgdx 게임을 ios로 이식하고 있습니다.
가 나는 UITextField에 설정하고 대리자를 만들고, 여기에 코드입니다 :about UITextFieldDelegate on ios

IOS 시뮬레이터에
this.textField.setDelegate(new Delegate(textField)); 

public static class Delegate extends UITextFieldDelegate.Adapter 
{ 
    private UITextField mTextField; 

    public Delegate(UITextField textField) 
    { 
     this.mTextField = textField; 
    } 

    @Override 
    public void didBeginEditing(UITextField textField) { 
     // TODO Auto-generated method stub 
     Gdx.app.debug(TAG, "didBeginEditing"); 
    } 

    @Override 
    public void didEndEditing(UITextField textField) { 
     // TODO Auto-generated method stub 
     Gdx.app.debug(TAG, "didEndEditing"); 
    } 

    @Override 
    public boolean shouldBeginEditing(UITextField textField) { 
     // TODO Auto-generated method stub 
     Gdx.app.debug(TAG, "shouldBeginEditing"); 
     return true; 
    } 

    @Override 
    public boolean shouldChangeCharacters(UITextField textField, 
      NSRange range, String string) { 
     // TODO Auto-generated method stub 
     Gdx.app.debug(TAG, "shouldChangeCharacters"); 
     return true; 
    } 

    @Override 
    public boolean shouldClear(UITextField textField) { 
     // TODO Auto-generated method stub 
     Gdx.app.debug(TAG, "shouldClear"); 
     return true; 
    } 

    @Override 
    public boolean shouldEndEditing(UITextField textField) { 
     // TODO Auto-generated method stub 
     Gdx.app.debug(TAG, "shouldEndEditing"); 
     return true; 
    } 

    @Override 
    public boolean shouldReturn(UITextField textField) { 
     // TODO Auto-generated method stub 
     if(this.mTextField == textField) 
     { 
      textField.resignFirstResponder(); 
     } 
     Gdx.app.debug(TAG, "shouldReturn"); 
     return true; 
    } 
} 

, 나는 텍스트 필드를 클릭하면 응용 프로그램이 충돌하며, 콘솔에 오류 메시지가 없습니다. 어떻게 해결할 수 있습니까? 어떤 정보라도 감사 할 것입니다! 감사합니다. !!

답변

0

Delegate 인스턴스는 호출되기 전에 GCed되었을 가능성이 큽니다. 이 시도 :

Delegate delegate = new Delegate(textField); 
this.textField.setDelegate(delegate); 
this.textField.addStrongRef(delegate); 

addStrongRef(...) 통화가 UITextField 목표 - C 인스턴스가 해제 될 때까지 GCed 인에서 Delegate 자바 인스턴스를 방지 할 수 있습니다. UITextField은 대리인으로 설정 한 인스턴스를 보유하지 않습니다 (참조 카운트를 늘립니다).

RoboVM의 차후 버전에서는 addStrongRef(...) 전화가 자동으로 수행됩니다.