Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone UITableVIew重新加载节:带动画:无障碍_Iphone_Objective C_Ios_Uitableview - Fatal编程技术网

Iphone UITableVIew重新加载节:带动画:无障碍

Iphone UITableVIew重新加载节:带动画:无障碍,iphone,objective-c,ios,uitableview,Iphone,Objective C,Ios,Uitableview,我有一个UITableView,它有几个部分,部分的数量是动态的,也就是说,它们可以随时增加。在表视图中使用动画重新加载节,其中节的数量不是什么大问题。我把这个叫做: [notesTableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationAutomatic]; 然而,当节数发生变化时,让它工作起来是一件非常痛苦的事情。我总是遇到典型的断言错误“在重新加载之前

我有一个UITableView,它有几个部分,部分的数量是动态的,也就是说,它们可以随时增加。在表视图中使用动画重新加载节,其中节的数量不是什么大问题。我把这个叫做:

[notesTableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationAutomatic];
然而,当节数发生变化时,让它工作起来是一件非常痛苦的事情。我总是遇到典型的断言错误
“在重新加载之前,tableview中的节数必须与重新加载之后的节数相同..等等”
。我知道我应该使用
[tableView insertSections…]
来解决这个问题,但在我的情况下,这样做可能会很困难

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


(我知道一个便宜的解决方法是使用UIView动画或动画,但这并不能提供与使用动画方法重新加载节相同的效果。)

我不知道这是否适用于动画,但它应该

在UItableView实现中,将
numberOfSections
方法更改为如下所示:

- (NSInteger)numberOfSections
{
    return numberOfSections;
}
numberOfSections是一个在需要时更改的NSInteger

更改此号码后,请尝试拨打:

[tableView reloadData];
您的UITableView应该相应地更改

编辑:我在动画中使用它,但我不确定它是否适用于您的情况。它适用于我的编辑风格、插入和删除行以及我的内容的一般更新

当您需要更改UITableView内容时,请放置以下内容:

[tableView beginUpdates];
// Here change your contents
[tableView endUpdates];

使用
FetchedViewControllers
时,这是一个常见错误。出现该错误的原因是,您正在删除
数据源中的对象,而tableView尝试加载tableView,并查看delegateMethods-这表明您的节比指定的节少

您有两个选择:

  • 实现
    FetchedResultsController
    委托方法并实现
    objectWillChange
    (或)
    objectDidChange
    方法,其内部表示

    [[self tableView] reloadData]; 
    
    // or
    
    [[self tableView] endUpdates];
    
    这应该可以解决问题

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

  • //创建NSMutableSet
    
    [self.tableView开始更新];
    如果(isAdd){
    [self.tableView insertSections:insertIndexSet with RowAnimation:UITableViewRowAnimationBottom];
    }
    否则{
    [self.tableView deleteSections:insertIndexSet with RowAnimation:UITableViewRowAnimationTop];
    }
    
    [self.tableView endUpdates]

    您是否有可能使用核心数据?