Xib设计器使用过时的SetNativeField / GetNativeField方法

时间:2017-05-19 13:26:32

标签: c# ios xamarin xib visual-studio-2017

平台:Visual Studio 2017 目标:iPad 10.3

我们有一个带有以下代码的Xib

[Foundation.Connect("btnCubicmeterFactor")]
    private UIKit.UIButton btnCubicmeterFactor {
        get {
            this.__mt_btnCubicmeterFactor = ((UIKit.UIButton)(this.GetNativeField("btnCubicmeterFactor")));
            return this.__mt_btnCubicmeterFactor;
        }
        set {
            this.__mt_btnCubicmeterFactor = value;
            this.SetNativeField("btnCubicmeterFactor", value);
        }
    }

在构建项目时,我们收到警告: 警告CS0618:'NSObject.SetNativeField(string,NSObject)'已过时:'不要使用;此API无法正确保留/释放现有/新值,因此可能会发生泄漏和/或崩溃。'

在iPad上运行应用程序时会发生崩溃。我想修复警告,但我找不到任何有关如何解决此问题的文档。 https://developer.xamarin.com/api/namespace/MonoTouch.Foundation/的文档说明了这一点,但没有指导如何解决。 有没有人遇到类似的问题,或者现在如何解决这些警告?

我们使用这些xib在运行时添加控件。

亲切的问候, 轮辋

1 个答案:

答案 0 :(得分:0)

根据this comment,可能只是简单地从ConnectAttribute切换到OutletAttribute将解决导致崩溃的双重释放,尽管您仍会收到有关崩溃的弃用警告SetNativeField / GetNativeField。如,

[Foundation.Outlet("btnCubicmeterFactor")]
private UIKit.UIButton btnCubicmeterFactor { ...etc... }

如果我正确阅读了讨论,问题不在于SetNativeField / GetNativeField从根本上是漏洞,而只是在与ConnectAttribute一起使用时会导致双重释放。