ios – NSFetchedResultsController:删除1行使应用程序崩溃

ios – NSFetchedResultsController:删除1行使应用程序崩溃,第1张

概述从NSFetchedResultsController提供的UITableView中删除行会导致我的应用程序崩溃. 错误是: * Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit/UIKit-2903.23/UITableView.m:1330 * Terminating a 从NSFetchedResultsController提供的UItableVIEw中删除行会导致我的应用程序崩溃.

错误是:

* Assertion failure in -[UItableVIEw _endCellAnimationsWithContext:],/SourceCache/UIKit/UIKit-2903.23/UItableVIEw.m:1330
* Terminating app due to uncaught exception ‘NSInternalinconsistencyException’,reason: ‘InvalID update: invalID number of rows in section 0. The number of rows contained in an existing section after the update (1) must be equal to the number of rows contained in that section before the update (1),plus or minus the number of rows inserted or deleted from that section (0 inserted,1 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in,0 moved out).’

我只想滑动删除.我的删除代码是这样的:

- (voID)tableVIEw:(UItableVIEw *)tableVIEw commitEditingStyle:(UItableVIEwCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{      [self.tableVIEw beginUpdates];      SequenceData *sd = [self.fetchedResultsController objectAtIndexPath:indexPath];      [self.managedobjectContext deleteObject:sd];      [self.tableVIEw deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]                          withRowAnimation:UItableVIEwRowAnimationFade];      [self.tableVIEw endUpdates];  }

我的NSFetchedResultsController的设置就像Ray Wanderlich的教程(http://www.raywenderlich.com/999/core-data-tutorial-for-ios-how-to-use-nsfetchedresultscontroller)

行数由以下因素确定:

- (NSInteger)tableVIEw:(UItableVIEw *)tableVIEw numberOfRowsInSection:(NSInteger)section {        ID sectionObjects = [[self.fetchedResultsController sections] objectAtIndex:section];      NSInteger nbObjects = [sectionObjects numberOfObjects];      return nbObjects;  }

看起来fetch没有更新(行数不变).我是否需要取自己(这不是由fetch控制器处理)?

显然,我在这里缺少一些基本的东西.不要犹豫,建议基本的答案.

我首先用控制器实现了这个:dIDChangeObject:…方法.错误是一样的,但有些细节不同.

编辑
我相信我的问题是固定的.两个答案(来自CX和Martin)帮助我找到了答案.马丁得到了答案,因为解释有助于我更好地理解……

解决方法 不要打电话
[self.tableVIEw deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UItableVIEwRowAnimationFade];

如果您使用获取的结果控制器.仅删除对象

[self.managedobjectContext deleteObject:sd];

然后自动调用获取的结果控制器委托方法dIDChangeObject:
并调用deleteRowsAtIndexPaths:.

所以在你的情况下,行被删除了两次,这导致了异常.

请注意,此处不需要beginUpdates / endUpdates.

总结

以上是内存溢出为你收集整理的ios – NSFetchedResultsController:删除1行使应用程序崩溃全部内容,希望文章能够帮你解决ios – NSFetchedResultsController:删除1行使应用程序崩溃所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1109720.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存