ContentView 中的按钮会导致 MonoTouch 运行时崩溃.Monotouch 4.0 中的错误

本文关键字:Monotouch 崩溃 错误 运行时 按钮 ContentView MonoTouch | 更新日期: 2023-09-27 17:57:00

我的应用程序在 MT 3.0 中运行良好。现在当我升级时。当按钮位于内容视图中时,我看到错误。单击按钮时会发生崩溃。法典:

public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPa
    float width = tableView.Bounds.Width - 70;
    var cell = tableView.DequeueReusableCell(kCellIdentifier);
    //if (cell == null)
    //{
    cell = new UITableViewCell(UITableViewCellStyle.Subtitle, kCellIdentifier);
    // }
    var behavior = tvc.behaviors.ElementAt(indexPath.Row);
    cell.TextLabel.Text = behavior.Name;
    cell.TextLabel.Font = UIFont.BoldSystemFontOfSize(22f);
    cell.DetailTextLabel.Text = behavior.Definition;
    var view = UIButton.FromType(UIButtonType.Custom);
    view.Tag = indexPath.Row;
    view.SetImage(UIImage.FromBundle("Images/plus.png"), UIControlState.Normal);
    view.Frame = new RectangleF(width - 50, 10, 50, 50);
    view.TouchUpInside += IncrementBehavior;
    var label = new UILabel(new RectangleF(width - 80, 10, 50, 50));
    label.Text = behavior.CurrentCount.ToString();
    label.BackgroundColor = UIColor.Clear;
    label.Font = UIFont.BoldSystemFontOfSize(24f);
    cell.ContentView.AddSubview(view);
    cell.ContentView.AddSubview(label);
    //cell.BackgroundColor = UIColor.Clear;)
    return cell;
}
void IncrementBehavior(object sender, EventArgs e) {
    var button = (UIButton)sender;
    var tag = button.Tag;
    var behavior = tvc.behaviors[tag];
    var indexpath = NSIndexPath.FromRowSection(tag, 0);
    var newBehavior = Repository.GetBehavior(behavior.Id);
    newBehavior.CurrentCount++;
    Repository.Update(newBehavior);
    tvc.behaviors[tag] = newBehavior;

    tvc.TableView.ReloadRows(new[] { indexpath }, UITableViewRowAnimation.None);
}

我交替收到这些错误:

Name: NSInvalidArgumentException Reason: -[__NSCFSet BridgeSelector]: unrecognized selector sent to instance 0x5c3c570

No constructor found for MonoTouch.UIKit.UIControlEventProxy::.ctor(System.IntPtr)

ContentView 中的按钮会导致 MonoTouch 运行时崩溃.Monotouch 4.0 中的错误

不确定这是否是问题所在,但是当我升级到4.0时,我也遇到了一些随机崩溃。 事实证明,4.0 GC更具侵略性,我以前侥幸逃脱的东西不再是犹太洁食。

特别是,如果我将事件处理程序分配给按钮,则需要确保该按钮是在类级别声明的。 如果在方法中本地声明,则 GC 将在超出范围时清除引用,然后在事件处理程序尝试触发时清除引用,它的引用不再存在。

因此,请尝试将按钮的声明移到方法之外。