菜鸟教程小白 发表于 2022-12-12 23:14:44

ios - Xamarin - UITableView 重新加载数组的数据


                                            <p><p>我使用 TableSource 的新类在 Xamarin 上实现了 UITableView。我正在从 MainView 初始化 TableSource 并传递一个数组。然后我尝试从 MainView 更新该数组,但出现错误:</p>

<blockquote>
<p>Object reference not sent to an instance</p>
</blockquote>

<p>MainVC 中的代码:</p>

<pre><code>public override void ViewDidLoad()
    {
      base.ViewDidLoad();
      // Perform any additional setup after loading the view, typically from a nib.
      //Console.WriteLine(&#34;Event 1&#34;);
      lVM = new ListViewModel();
      lVM.dataUpdated += this.updateArray;
      lVM.dataUpdatedNetwork += this.networkUpdatedSQL;

      lVM.getInitialData(100);

      tableSource = new ListTableSource(this);
      tableV.Source = tableSource;

    }

    public void updateArray(object sender, EventArgs e) {

      InvokeOnMainThread(delegate
      {
            //Console.WriteLine(&#34;Update array event on VC for SQL count for array &#34; + lVM.ordersArray.Count);
            tableSource.updateArray(lVM.ordersArray);
            tableV.ReloadData();
      });

    }
</code></pre>

<p>TableSource中的代码:</p>

<pre><code>public class ListTableSource : UITableViewSource
    {
      ListViewController listVCRef;
         ArrayList tableItems;
         string cellIdentifier = &#34;TableCell&#34;;

      public ListTableSource(ListViewController listVC)
      {
            tableItems = new ArrayList();
            listVCRef = listVC;
      }

      public void updateArray(ArrayList items) {
            tableItems = new ArrayList(items);
            Console.WriteLine(&#34;Items &#34; + tableItems.Count);
      }
      public override void RowSelected(UITableView tableView, NSIndexPath indexPath)
      {
            new UIAlertView(&#34;Alert&#34;, &#34;You touched: &#34; + tableItems, null, &#34;OK&#34;, null).Show();
            tableView.DeselectRow(indexPath, true);
      }

      public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
      {
            UITableViewCell cell = tableView.DequeueReusableCell(cellIdentifier);

            if (cell == null)
            {
                cell = new UITableViewCell(UITableViewCellStyle.Subtitle, cellIdentifier);
            }

            Order currentOrder = tableItems as Order;

            cell.TextLabel.Text = currentOrder.comment;
            cell.DetailTextLabel.Text = currentOrder.orderDate.ToString();
            return cell;

      }

      public override nint RowsInSection(UITableView tableview, nint section)
      {
            return tableItems.Count;
      }

      public override nfloat GetHeightForRow(UITableView tableView, NSIndexPath indexPath)
      {
            return 80;
      }
    }
</code></pre>

<p>我的方法错了吗?我应该如何更新 TableSource 中的数据。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我的感觉是 <code>updateArray</code> 在 <code>tableSource = new ListTableSource(this);</code> 之前执行,因此 <code>tableSource</code> 为空。 <code>lVM.getInitialData(100);</code> 可能会触发 <code>updateArray</code>。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - Xamarin - UITableView 重新加载数组的数据,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/41223156/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/41223156/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - Xamarin - UITableView 重新加载数组的数据