gpt4 book ai didi

c# - 为什么 MonoTouch 运行时会因 UIAlertView 而崩溃?

转载 作者:太空宇宙 更新时间:2023-11-03 14:07:47 25 4
gpt4 key购买 nike

我有一个扩展 UIAlertView 的遗留 C# 类,用于提示用户输入 IP 地址。它还将保留 IP 地址并将其加载为默认条目值。

原始代码破解了 iOS4.x UIAlertView 以添加一个文本字段,它有几个布局问题。我将代码转换为使用 iOS5 UIAlertViewAlertViewStyle 设置,一切正常。

我被要求启用弹出键盘上的 Done 键,以便它可以成为 Connect 按钮的快捷方式。我在类的构造函数中添加了如下代码:

public AddressAlertView()
{
AddButton("Cancel");
AddButton("Connect");
AlertViewStyle = UIAlertViewStyle.PlainTextInput;

// NEW - get input text field, enable Done on the keyboard and
// allow Done to be the same as the Connect button
UITextField fld = GetTextField(0);
fld.ReturnKeyType = UIReturnKeyType.Done;
fld.ShouldReturn = (textField) =>
{
DismissWithClickedButtonIndex(1, true);
return textField.ResignFirstResponder();
};
// *** end of new code ***

// restore saved IP address
string savedAddress = NSUserDefault.StandardUserDefaults.StringForKey(AddressKey);
if (savedAddress != null)
fld.Text = savedAddress;
}

类的使用方式如下:

....
AddressAlertView addrPrompt = new AddressAlertView();
addrPrompt.Title = "IP Address";
addrPrompt.Message = "Enter address";
addrPrompt.Dismissed += (sender, e) =>
{
if (e.ButtonIndex == 1)
{
// use IP address...
....
}
};
addrPrompt.Show();
....

现在是问题。运行这段代码时,AddressAlertView 正确显示弹出对话框,一切都像以前一样工作。但是,如果我点击键盘上的 Done,应用程序会在 UIAlertView 中爆炸。

我尝试将新代码移动到 public override void LayoutSubviews() 方法,但它仍然崩溃。

有什么想法吗?

最佳答案

您需要将 AddressAlertView 声明为类成员:

AddressAlertView addrPrompt;
public void DoSomething()
{

addrPrompt = new AddressAlertView();
//etc

}

这种情况下的问题(我有很多与 UIAlertViews 类似的情况)是 AddressAlertView 对象被 GC 处理,事件处理程序导致崩溃。为确保这是问题所在,请不要更改任何内容,只需删除/注释 addrPrompt.Dismissed += ... 行并再次测试。如果它没有崩溃,那么这就是解决方案。

关于c# - 为什么 MonoTouch 运行时会因 UIAlertView 而崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8855778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com