【问题标题】:Crash for second view object's name assign第二个视图对象的名称分配崩溃
【发布时间】:2017-08-22 16:28:07
【问题描述】:

我是 Xamarin 和 MVVMCross 的新手。所以我创建了 2 个视图。登录并注册。我在 Login 上有一个按钮可以转到 Register 视图,我将通过 Login 的 ViewModel 中的这段代码去那里:

// method when user tap register button
public IMvxCommand NavigateRegister
{
    get { return new MvxCommand(() => ShowViewModel<RegisterViewModel>()); }
}

注册页面可以正常打开。但是,一旦我在注册视图(文本编辑)上为单个对象分配名称,当我点击注册按钮时,应用程序就会崩溃。

以下是错误信息:

Xamarin.iOS:收到未处理的 ObjectiveC 异常: NSUnknownKeyException [ setValue:forUndefinedKey:]:这个类不是键值 键 regNameEdit 的编码兼容。

编辑: 更多详细信息:我已经指定了名称(见下图),但仍然崩溃:

并且视图也被分配给它的类“CreateAccount”。但我注意到类声明在“public partial class CreateAccount : MvxViewController”行中“部分”变暗了。这是本课程和第一个课程唯一明显的区别。

using MvvmCross.Binding.BindingContext;
using MvvmCross.iOS.Views;

namespace MyApp.iOS.Views
{
    public partial class CreateAccount : MvxViewController
    {
        public CreateAccount() : base("CreateAccount", null)
        {
        }

        public override void ViewDidLoad()
        {
            base.ViewDidLoad();
            // Perform any additional setup after loading the view, typically from a nib.

            Title = "Register";

            var set = this.CreateBindingSet<CreateAccount, Core.ViewModels.CreateAccountModel>();
            set.Bind(regNameEdit).To(vm => vm.NameStr);
        }

        public override void DidReceiveMemoryWarning()
        {
            base.DidReceiveMemoryWarning();
            // Release any cached data, images, etc that aren't in use.
        }
    }
}

Bind(regNameEdit) 也是一个错误(仍然没有检测到 textedit)

【问题讨论】:

    标签: xamarin xamarin.ios xib


    【解决方案1】:

    这通常意味着在您的情况regNameEdit 中未在 View/ViewController 类中定义 a 控件。

    确保您为此编辑创建了后置属性,并且分配给 XIB 的类是包含该属性的类。

    如果您使用的是 Xamarin Studio Designer,则创建 back 属性,选择 XIB/StoryBoard 中的 UIControl 并设置名称,然后输入。

    这将创建一个具有您在 ViewController 中可访问的名称的属性。

    public override void ViewDidLoad()
    {
        base.ViewDidLoad();
    
        this.MyUITextField.Text = string.Empty;
    }
    

    更新

    使用情节提要时:

    试试这个:从 TextField 中删除名称并从 ViewController 类中删除名称,然后清理您的项目并重建。将类重新添加到 ViewController,但是当它点击底部的黄色图标时,输入名称并按 Enter。继续使用 TextField,选择它并输入名称并回车。

    更新 #2

    使用 XIB 时 当您从菜单创建 ViewController 时,Xamarin Studio 将创建 ViewController 类和 XIB 文件,并将其中一个与另一个相关联,因此您无需执行任何其他操作来链接它们。

    对于 TextField,您需要按照前面的说明添加名称。

    试试这个:删除 UITextField 的名称并保存并清理/重建项目,然后添加名称并按 Enter。

    你可以做一些事情来验证是否有任何问题,双击 XIB 中的按钮,这应该会带你到 ViewController 类来创建一个方法。

    希望这会有所帮助。

    【讨论】:

    • 您好,谢谢您的回答。我实际上已经这样做了,但崩溃仍然发生。如果您想看一下,我在我的问题中添加了更多详细信息。
    • 我想我在这里缺少一些基本的东西。我没有意识到该项目有一个故事板和一个视图控制器。现在我在 xib 中设计所有东西。不知道 viewcontroller 如何链接到 firstview.xib。
    • 好的。我双击第二个xib上的btn,但没有任何反应。可能是什么问题?
    • 好的,我发现了问题。由于我使用的是 Mvx,因此视图类命名空间是 MyApp.iOS.Views,但视图设计器类是 MyApp.iOS。我所做的是更改视图类命名空间之后的命名空间,现在一切正常。我很欣赏你的回答,因为它以某种方式引导我解决我的问题。 TQ v.much,祝你有美好的一天!
    猜你喜欢
    • 1970-01-01
    • 2022-06-17
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多