【问题标题】:iPhone, Monotouch, and XIB outlet issuesiPhone、Monotouch 和 XIB 插座问题
【发布时间】:2011-06-05 22:47:06
【问题描述】:

我在将子视图中的控件映射回所属控制器上的字段时遇到问题。具体来说,我已将每个“控件”的出口映射到文件的所有者。然后,Monotouch 为控制器的 xib Designer.cs 文件生成代码,以将这些控件作为控制器类的属性引用。但是,当我运行我的代码时;尝试在控件上设置属性时出现 object is null 错误。用调试器挖掘问题;似乎 GetNativeField 在尝试通过 xib 文件中的名称访问网点时返回 null。

有人知道为什么会发生这种情况吗?我检查了 .xib 文件和生成的代码; Outlet、Property 和 Field 名称相互一致。

【问题讨论】:

    标签: c# iphone interface-builder xamarin.ios xib


    【解决方案1】:

    请注意,只有在加载视图后才能访问出口,这发生在LoadView() 或通过访问 UIViewController 的“View”属性(这将隐式加载视图)。 只有这样 IB 内容才会被构建并可供使用。

    因此,如果您想更改内容,您可以手动调用LoadView(),或者在您的视图中覆盖它,调用base.LoadView(),然后访问插座。

    【讨论】:

      【解决方案2】:

      我找出了导致问题的原因;这就是我将控制器推入堆栈的方式:

      using(var batteryController = new BatteryController()){
      
          navigationController.PushViewController(batteryController,true);
      
      }
      

      似乎在控制器上调用 dispose 时,会将 NIB 资源从内存中删除;这是导致问题的原因。

      但是,这带来了另一个问题。一旦新控制器被推入堆栈,您不应该在新控制器上调用 dispose 吗?在目标 C 中,当您将控制器压入堆栈时;你应该在之后打电话释放。那我到底做错了什么?

      【讨论】:

      • 在 MonoTouch 上有一个垃圾收集器,它会自动释放文档中提到的应用程序中的非引用资源 -> Mono 带有一个垃圾收集器,允许开发人员专注于他们的软件并让运行时负责释放对象所需的簿记。这避免了常见的内存泄漏,并减少了为避免这些泄漏而需要编写的代码量。来源:monotouch.net/…
      【解决方案3】:

      您应该在 AppDelegate 上添加插座。也可以在我的博客上尝试一下,这是一个简单计算器的视频,它是西班牙语的,但如果你看它,它非常自我解释,你可以在这里观看 http://alexsoto.me/calculadora-monotouch 它应该可以帮助你开始:) 希望这会有所帮助 祝你好运,如果我能在其他方面帮助你,请告诉我

      编辑:你也可以查看这个视频这个使用子视图也应该对你有帮助,这个是英文http://www.alexyork.net/blog/post/Selecting-a-contact-from-the-Address-Book-with-MonoTouch.aspx

      【讨论】:

        猜你喜欢
        • 2011-12-30
        • 1970-01-01
        • 1970-01-01
        • 2013-11-15
        • 1970-01-01
        • 1970-01-01
        • 2011-03-31
        • 2023-04-01
        • 1970-01-01
        相关资源
        最近更新 更多