【问题标题】:Outlets are null in ViewDidLoad with mvvmcross使用 mvvmcross 在 ViewDidLoad 中的插座为空
【发布时间】:2012-12-08 17:22:55
【问题描述】:

在我的 view.designer.cs 中,我的 outlet 是由 xcode 生成的。

在开始调试时,我的属性在添加绑定时出现空引用异常,在下面的代码中 this.SampleText 为空。

public override void ViewDidLoad ()
        {
            base.ViewDidLoad ();

            this.AddBindings(
                new Dictionary<object, string>()
                {
                    { this.SampleText, "{'Text':{'Path':'VMText'}}"}
                });     
        }

我在应用程序的输出中注意到以下错误: "应用程序窗口在应用程序启动结束时应该有一个根视图控制器"

我错过了什么?

【问题讨论】:

    标签: iphone xamarin.ios monotouch.dialog mvvmcross


    【解决方案1】:

    听起来您的 iOS 设置可能存在更普遍的问题 - 可能是 xcode 和 MonoTouch 之间的 XIB 文件同步问题。

    在尝试添加 MvvmCross 绑定之前,请查看 MonoTouch 层 - 如果 MonoTouch 层中的 this.SampleText 为空,那么您需要先解决该问题,然后才能添加 MvvmCross 绑定代码。

    MonoTouch 软调试器是帮助调试此问题的绝佳工具 - 使用模拟器的调试周期非常快 - 因此这通常有助于解决这些问题。


    从您对这个问题的部分回答来看,听起来您确实试图在基于对话框的 UI 中使用 XIB - 这可能行不通 - 我认为 MonoTouch.Dialog 始终基于单个表 - 所以它是不期待 XIB(至少,这是我的经验!)


    至于“应用程序窗口应该在应用程序启动结束时有一个根视图控制器”,这听起来更像是您的 AppDelegate.cs 中的一个普遍问题。或者,它可能是演示者的问题。您使用的是哪个演示者?

    该错误消息本身在 StackOverflow 上有很多点击 - 例如。 Applications are expected to have a root view controller at the end of application launch - 但我现在不确定哪些适合您的情况。


    我必须承认 iOS 和 MVVMCross 对我来说一切都不清楚

    对于来自 C# 背景的编码人员,我认为这并不奇怪 - 我认为从 Windows 上的 VS 到 Mac 上的 MonoDevelop(带有一点 xcode)的跳跃是一个不平凡的飞跃。从 WP 切换到 iOS 开发比从 WP 切换到 Droid 需要更多时间——这种情况与你是否使用 MvvmCross 无关——如果你在做 MT 开发,你就是在做本机代码,所以你确实需要一些时间稍微了解一下 iOS(根据我的经验/意见!)。

    在大多数情况下,我亲自编写了数万行代码,撰写了数百篇博客文章和 stackoverflow 答案,并在 mvvmcross 上进行了十次会议。我已经在五个不同的操作系统中完成了这项工作,其中四个是我在编写代码时学到的,所有这些都是我与平台和工具错误和特性作斗争的。

    我会继续尽可能多地发帖 - 并继续“免费”运营

    我也鼓励每个用户也发布和博客来介绍他们的体验。我希望通过这种方式产生和分享知识。对于正在阅读本文、使用 mvvmcross 并学习有关跨平台编码的任何人(无论好坏),请考虑分享这些知识。为了获得灵感,请查看用户撰写的一些演示文稿和博客文章 - 我尝试在 http://slodge.blogspot.co.uk/p/mvvmcross-quicklist.html 上列出它们。谢谢:)


    另外,在提问时,请说明您使用的是哪个版本的 mvvmcross 以及您的代码基于哪个示例 - master 和 vNext 之间存在差异,并且随着时间的推移已经修复 - 所以发布此信息将帮助我尝试理解和/或复制您看到的错误。

    谢谢:)

    【讨论】:

    • 我修改了我原来的 MvxTouchDialogViewController 基类并将其更改为 MvxBindingTouchViewController 我必须承认 iOS 和 MVVMCross 对我来说一切都不清楚(对于 android 和 WP 来说没问题) 应用程序知道启动,但命令绑定不不行……我还在调查这个问题
    • 我真的觉得您的支持令人难以置信!我真的对不同的 MvxXXXXViewControler 感到困惑,我试图复制/粘贴您的示例代码,但我认为我应该像 Android 一样深入研究您的代码;-) 关于博客,我计划为“傻瓜”写文章,详细的逐步编码。由于我仍然是 OSX/iOS 的傻瓜,并且一个月前也是 Monodroid 和 WP7 的一个,我认为我完全有资格这样做 ;-) 我希望这可以帮助 monotouch/droid 和 MVVMCross 的采用。跨度>
    • 谢谢 - 我在分享知识方面的 cmets 是一般性的,针对所有人,而不是你。每一项贡献都非常感谢 - 世界在不断变化,我们都在不断学习 :) 但我也鼓励人们找到平衡 - 不要在笔记本电脑上花费太长时间 - 为孩子、妻子、家人、朋友、狗等 :) 谢谢 :)
    • PS 我也非常重视这些问题 - 我认为它们也有助于定位、生成和分享知识 - 请不要停止提问 :)
    • 我找到了带有我的命令绑定的 pb ...“点击”在单声道触控中似乎不存在。我必须使用 { this.Btn, "{'TouchUpInside':{'Path':'ClickBtnCommand'}}"} 来触发点击事件(this.Btn 是一个 UIButton)。
    【解决方案2】:

    我知道这有点老了,但我只是遇到了同样的问题。

    当我在调用 ViewDidLoad 时尝试访问它们时,我的 View.designer.cs 文件中的插座属性为空。

    原来我在 Visual Studio 中的 xib 文件不再设置为 InterfaceDefinition 的构建操作。

    希望这对偶然发现此问题的其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-24
      • 2011-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-13
      相关资源
      最近更新 更多