Я использую DateElement в реализации MonoTouch Dialog MvvmCross. Исключение происходит потому, что метод UpdateDetailDisplay (ячейка UITableViewCell) в DateTimeElement ожидает, что параметр ячейки никогда не будет равен нулю.MvvmCross - Null Исключение при использовании DateTimeElement в MonoTouch-Dialog
protected override void UpdateDetailDisplay(UITableViewCell cell)
{
if (cell.DetailTextLabel != null)
{
cell.DetailTextLabel.Text = FormatDate(Value);
}
}
Кажется, что этот метод вызывается три раза в течение установленного планом диалоговый:
в результате создания экземпляра DateElement
на связывание
во время создания TableView при вызове GetCell.
Параметр клетка присутствует только на события 3.
Я делаю что-то неправильно или если метод есть тест по параметру, как нуль StringElement имеет?
Вот мой код в случае ViewDidLoad в моей производной MvxTouchDialogViewController:
public override void ViewDidLoad()
{
base.ViewDidLoad();
this.Root = new RootElement("Sign-Up")
{
new Section()
{
Bind(new EntryElement("Gender:", "required"), "{'Value':{'Path':'Gender','Mode':'TwoWay'}}"),
Bind(new EntryElement("First name:", "required"), "{'Value':{'Path':'FirstName','Mode':'TwoWay'}}"),
Bind(new EntryElement("Last name:", "required"), "{'Value':{'Path':'LastName','Mode':'TwoWay'}}"),
Bind(new EntryElement("Display name:", "required"), "{'Value':{'Path':'DisplayName','Mode':'TwoWay'}}"),
Bind(new EntryElement("Email:", "required"), "{'Value':{'Path':'Email','Mode':'TwoWay'}}"),
Bind(new EntryElement("Confirm email:", "required"), "{'Value':{'Path':'ConfirmEmail','Mode':'TwoWay'}}"),
Bind(new EntryElement("Password:", "required",null,true), "{'Value':{'Path':'Password','Mode':'TwoWay'}}"),
Bind(new EntryElement("Confirm password:", "required", null,true), "{'Value':{'Path':'ConfirmPassword','Mode':'TwoWay'}}"),
Bind (new DateElement("Date of birth", DateTime.Now), "{'Value':{'Path':'DateOfBirth','Mode':'TwoWay'}}")
},
};
}
я только смог «обойти» проблему, выводя свой собственный класс от DateElement с моим собственным способом:
класс MyDateElement общественности: DateElement { общественных MyDateElement (строка заголовка, дата DateTime) : основание (заголовок, дата) { }
protected override void UpdateDetailDisplay(UITableViewCell cell)
{
if(cell == null)return;
if (cell.DetailTextLabel != null)
{
cell.DetailTextLabel.Text = FormatDate(Value);
}
}
}
зашел на https://github.com/slodge/MvvmCross/issues/13 – Stuart
Я принимаю это как комплимент.Просто чтобы подтвердить, параметр ячейки всегда равен null, пока TableView не свяжется с источником и не начнет называть source.GetCell (...) –
Phew - Он был предназначен как комплимент - и в качестве благодарности :) – Stuart