我遇到与Xamarin custom UITableViewCell throws System NullReferenceException讨论的问题非常类似的问题。
然而,在那里得到答案之后,我的问题还没有解决。
我有自定义UITableView BoardListCell
。在我的故事板中,我有一个UITableView
。可以通过插座ViewController
在我的tableView
访问它。
在我的视图控制器中,我获取数据。然后我做tableView.Source = new BoardsTableViewSource(sourceData);
我的BoardsTableViewSource
:
using System;
using System.Collections.Generic;
using Foundation;
using UIKit;
public class BoardsTableViewSource : UITableViewSource
{
private List<List<Object>> data;
Boolean normalBoards;
public BoardsTableViewSource (List<List<Object>> data, bool normalBoards)
{
this.data = data;
this.normalBoards = normalBoards;
}
public List<List<Object>> getData()
{
return data;
}
public override nint RowsInSection (UITableView tableview, nint section)
{
return data.Count;
}
public override string TitleForHeader (UITableView tableView, nint section)
{
return "Header";
}
public override string TitleForFooter (UITableView tableView, nint section)
{
return "Footer";
}
public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
{
BoardListCell cell = (BoardListCell)tableView.DequeueReusableCell("BoardTableCell");
List<Object> cellData = data [indexPath.Row];
cell.setData("1","!"); //I have simplified the data for this example
}
}
}
调试时,我在cell.setData()行上得到NullReference异常。
在StoryBoard中,我将BoardListCell
的标识符设置为BoardTableCell
。
BoardListCell
:
public partial class BoardListCell : UITableViewCell
{
public static readonly UINib Nib = UINib.FromName ("BoardListCell", NSBundle.MainBundle);
public static readonly NSString Key = new NSString ("BoardListCell");
public BoardListCell() : base()
{
}
public BoardListCell (IntPtr handle) : base (handle)
{
}
public static BoardListCell Create ()
{
return (BoardListCell)Nib.Instantiate (null, null) [0];
}
public void setData(String top, String bottom)
{
this.exp.Text = top;
this.playTime.Text = bottom;
}
}
exp
和playTime
是UILabel
的出口。我删除并重新添加了这些插座,但这没有改变任何东西。
我不知道问题是什么。我唯一能想到的是因为我使用的是我用StoryBoard制作的UITableView
并通过插座访问它。不过,我不知道问题是什么......
答案 0 :(得分:3)
BoardListCell cell = (BoardListCell)tableView.DequeueReusableCell("BoardTableCell");
if (cell == null) {
cell = new BoardListCell();
}