iphone - UITableVIew reloadSections :withAnimation:withoutHassle

标签 iphone objective-c ios uitableview

我有一个包含多个部分的 UITableView,部分的数量是动态的,也就是说,它们可以随时增加。在 TableView 上重新加载带有动画的部分,其中部分的数量没什么大不了的。我只是这样称呼:

[notesTableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationAutomatic];

然而,当部分的数量发生变化时让这个工作起来是一件很痛苦的事情。我总是遇到典型的断言错误 “重新加载之前您的 tableview 中的部分数必须与重新加载之后相同......等等”。我知道我应该使用 [tableView insertSections...] 来摆脱这个,但在我的情况下这样做可能很困难。

我的节数基于数组的大小。无论如何,是否可以自动重新加载带有动画的部分,就像调用 [tableView reloadData] 一样简单,而不必担心手动插入行和部分?

(我知道一种廉价的解决方法是使用 UIView 动画或 CAAnimation,但这并不能提供与 reloadSections withAnimation 方法相同的效果。)

最佳答案

当您使用 FetchedViewControllers 时,这是一个常见的错误。您收到该错误的原因是因为您正在删除 dataSource 中的对象,并且 tableView 尝试加载 tableView,并查看 delegateMethods - 它表明您的部分较少指定的。

你有两个选择:

  1. 实现 FetchedResultsController 委托(delegate)方法并实现 objectWillChange(或)objectDidChange 方法,并在其中说类似的内容

    [[self tableView] reloadData]; 
    
    // or
    
    [[self tableView] endUpdates];
    

    这应该可以解决问题。

  2. 实现通知(当您删除不同 managedObjectContext 下的数据时),并在 NSManagedObjectContextDidSave(或)NSManagedObjectContextDidChange 时发布通知。然后您将必须添加一个观察者以将更改与通知合并。但我怀疑你的问题有这么严重。我会说选项 (1) 应该足够了。

关于iphone - UITableVIew reloadSections :withAnimation:withoutHassle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10055671/

相关文章:

objective-c - 在 OpenGL objective c os x 中绘制纹理

ios - CloudKit Query 适用于 Xcode 发布版本,不适用于 TestFlight

objective-c - 在 Objective-C 中删除单元格行

ios - 制作一个内部有3个屏幕的屏幕并使用分段控件

ios - 如何将 iOS 设备添加到多个配置文件?

ios - iAd 的一些问题

iphone - 如何在 iPhone 上测试 Xcode 项目?

iphone - 从 iPhone 应用程序导入 native 日历的可能性

iphone - 代码签名错误: The identity 'iPhone Developer' doesn't match any valid certificate/private key pair in the default keychain

iphone - 更改 UITableview 中节标题的颜色