我们正在向ios移植一个libgdx游戏 我创建了一个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模拟器上,当我单击文本字段时,应用程序将崩溃,并且控制台上没有错误消息。
怎么解决?任何信息将不胜感激!
提前谢谢!!
答案 0 :(得分:0)
您的Delegate
实例可能在调用之前已经过GCed。试试这个:
Delegate delegate = new Delegate(textField);
this.textField.setDelegate(delegate);
this.textField.addStrongRef(delegate);
addStrongRef(...)
调用阻止Delegate
Java实例进行GC操作,直到释放UITextField
Objective-C实例为止。这是必需的,因为UITextField
不保留(增加引用计数)您设置为委托的实例。
在未来的RoboVM版本中,addStrongRef(...)
电话会自动为您完成。