在iOS

时间:2016-02-08 03:22:07

标签: ios uitableview xamarin xamarin.ios tableviewcell

我遇到与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;
    }
}

expplayTimeUILabel的出口。我删除并重新添加了这些插座,但这没有改变任何东西。

我不知道问题是什么。我唯一能想到的是因为我使用的是我用StoryBoard制作的UITableView并通过插座访问它。不过,我不知道问题是什么......

1 个答案:

答案 0 :(得分:3)

如果DequeueReusableCell无法找到合适的单元格来重复使用,那么它将返回null。所以你需要在引用你的单元格之前明确地检查它:

BoardListCell cell = (BoardListCell)tableView.DequeueReusableCell("BoardTableCell");

if (cell == null) {
  cell = new BoardListCell();
}