问题描述
我正在使用 Xamarin 和 MvvmCross 6.4.2 编写一个小示例应用程序。我完成了 Xamarin.Android 版本,现在正在启动 Xamarin.iOS 版本。我为第一个屏幕创建了一个视图控制器:
[Register("SignInViewController")]
public class SignInViewController : MvxViewController<SignInviewmodel>
{
public SignInViewController() : base(nameof(SignInViewController),null)
{
}
public SignInViewController(IntPtr handle) : base(handle)
{
}
public override void ViewDidLoad()
{
// Why does it crash when I call base.ViewDidLoad() ?
//base.ViewDidLoad();
NavigationController.NavigationBar.BarTintColor = UIColor.Blue;
var label = new UILabel();
label.Text = "test";
label.BackgroundColor = UIColor.Red;
label.Frame = new CoreGraphics.CGRect(30,100,100);
View.Add(label);
// This does not seem to work. If I remove it,label.Text will be "test"
var set = this.CreateBindingSet<SignInViewController,SignInviewmodel>();
set.Bind(label).For("Text").To(vm => vm.Username);
set.Apply();
}
}
我贴了一个测试标签只是为了开始并确保一切正常。由于我对其进行了硬编码,因此我希望标签具有文本“用户名测试”,但是当我运行该应用程序时它是空白的。此外,如果我尝试使用空引用异常调用 base.ViewDidLoad()
,它会崩溃,这不应该,所以我认为我遗漏了一些重要的东西。
注意:我不想使用 MvvmCross 7,因为它仍在开发中。
解决方法
调用 const fileData = `
tcp.0: [1609172718.597749195,{"HOSTNAME":"sample-audi-lbs-1","IP":"10.55.17.231"}]
tcp.0: [1609172718.597749195,"IP":"10.55.17.232"}]
tcp.0: [1609172718.597749195,"IP":"10.55.17.233"}]
tcp.0: [1609172718.597749195,"IP":"10.55.17.234"}]
tcp.0: [1609172718.597749195,"IP":"10.55.17.235"}]`;
const ipRegex = /((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/gm;
var arr = fileData.match(ipRegex);
console.log(arr);
为您第一次查看
:
this.Request = MvxViewModelRequest<SignInViewModel>.GetDefaultRequest();
参考:how-to-call-mvxdialogviewcontroller-as-a-popover)
,在做了一些研究之后,我发现真正的问题是我没有正确地使用 iOS/MvvmCross。我想用 C# 编写所有视图并避免使用 storyboard/xib/designer 类,但必须先更改一些内容。接受的答案 here 为我解决了所有问题。