【问题标题】:Inserting a new cell into a collectionview将新单元格插入到集合视图中
【发布时间】:2015-08-20 10:57:20
【问题描述】:

我尝试在 UIcollectionView 中添加一个新单元格,但它不起作用。 事实上,我向我的 API 发送了一个 post 请求,我等待响应,当我得到响应时,我将 de JSON 内容放入一个 NSDictionnary。

我的 CellForItemAtIndexPath 数据源方法从一个名为“formationsData”的数组中加载单元格内容,因此当我得到响应时,我将我的 NSDictionnary 添加到这个数组中。

在 numberOfItemAtIndexPath 中,我返回类似:[self.formationData count]。

这是我发布请求时的代码:

 NSDictionary * response = [responseJSON valueForKey:@"formation"];
    [(NSMutableArray *)_formationsView.carousel.formationsData addObject:response]; 
    [_formationsView.carousel insertItemsAtIndexPaths:@[[NSIndexPath indexPathForItem: _lastRowIndex-1 inSection:0]]]; //insert at index : last row - 1
//[_formationsView.carousel reloadData]

在我使用 reloadData 之前,但是当我这样做时我的应用程序崩溃了。

我的问题:

【问题讨论】:

  • 为什么您的应用在使用 reloadData 时会崩溃?
  • 原因:'-[UIKeyboardTaskQueue waitUntilAllTask​​sAreFinished] 只能从主线程调用。也许是因为我发送了一个异步请求?但是我的函数只有在我收到数据时才会触发,所以我不知道。

标签: ios uicollectionview uicollectionviewcell


【解决方案1】:

在我使用 reloadData 之前,但是当我这样做时我的应用程序崩溃了。

那么这就是你需要解决的问题。仅向用于填充集合视图的数组添加一个项目不足以使单元格出现。集合视图不知道数据源从哪里获取数据;当数据发生变化时,您需要拨打-reloadData或类似的电话。

如果-reloadData 导致崩溃,那么您需要找出原因并修复它。

【讨论】:

  • 但我不知道为什么它会导致崩溃:由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“-[UIKeyboardTaskQueue waitUntilAllTask​​sAreFinished] 只能从主线程调用。”我使用 didReceiveData,一个委托方法来知道响应何时返回,我在这个函数中使用重新加载数据。我想我不能在委托函数中使用重新加载数据,我不知道......因为我使用异步请求,所以在发送我的发布请求后我不能使用 reloadData,我不得不使用我的委托方法.
  • 您绝对可以在委托方法中调用-reloadData,但从后台线程调用它可能不是一个好主意。有关如何从主线程调用方法的示例,请参阅Objective C - Calling a method on the main thread?
  • 谢谢,你解决了我的问题。不过如果因为我不是很明白,可以多解释一下,当我调用didReceivedData方法的时候,是没有后台线程的吧?
  • 如果您是异步加载数据,那么是的,很可能涉及到后台线程。
  • 是的,但是当我尝试在didReceiveData中使用reloadData时,异步请求正常完成,所以我有点困惑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-24
  • 1970-01-01
  • 2020-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多