О UITextFieldDelegate на IOS
Мы портируем игру libgdx на ios.
Я создаю UITextField и устанавливаю делегат, вот код:
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;
}
}
в симуляторе ios при нажатии на текстовое поле происходит сбой приложения, и на консоли не появляется сообщение об ошибке. как это решить? Любая информация будет оценена! заранее спасибо!!
1 ответ
Решение
Ваш Delegate
экземпляр, вероятно, был GCed, прежде чем он вызывается. Попробуй это:
Delegate delegate = new Delegate(textField);
this.textField.setDelegate(delegate);
this.textField.addStrongRef(delegate);
addStrongRef(...)
вызов предотвращает Delegate
Экземпляр Java от GCed до UITextField
Экземпляр Objective-C освобожден. Это требуется с UITextField
не сохраняет (увеличивает количество ссылок) экземпляр, который вы указали в качестве делегата.
В будущей версии RoboVM addStrongRef(...)
Звонок будет сделан автоматически для вас.