UITableview中的Sections而不是Rows引发了异常

时间:2014-05-08 18:20:26

标签: ios objective-c uitableview

我有一个UITableView可以完美地按照需要工作,直到我试图将每一行转换成各个部分,并为每个部分提供自己的标题,有点像Instagram应用程序在其主要提要中。

所以我的工作代码如下:

@property (nonatomic) NSMutableArray *postsList;


- (void)addPostsToList:(NSArray *)posts {

    NSInteger startingRow = [self.postsList count];
    NSInteger postsCount = [posts count];
    NSMutableArray *indexPaths = [[NSMutableArray alloc] initWithCapacity:postsCount];
    for (NSInteger row = startingRow; row < (startingRow + postsCount); row++) {

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:0];
        [indexPaths addObject:indexPath];
    }

    [self.postsList addObjectsFromArray:posts];
    [self.tableView insertSections:[NSIndexSet indexSetWithIndex:[self.postsList count]] withRowAnimation:UITableViewRowAnimationAutomatic];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return [self.postList count];
}

但是当我将代码更改为以下内容时,我收到了断言失败:

- (void)addPostsToList:(NSArray *)posts {

    [self.postsList addObjectsFromArray:posts];
    [self.tableView insertSections:[NSIndexSet indexSetWithIndex:[self.postsList count]] withRowAnimation:UITableViewRowAnimationAutomatic];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

     return 1;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

     return [self.postsList count];
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {

    return 40;
}

这是错误消息:

*断言失败 - [UITableView _endCellAnimationsWithContext:],/ SourceCache / UIKit_Sim / UIKit-2935.137 / UITableView.m:1134 * 由于未捕获的异常终止应用&#39; NSInternalInconsistencyException&#39;,原因:&#39;尝试插入第100部分,但更新后只有100个部分&#39;

有人可以对此有所了解吗?

2 个答案:

答案 0 :(得分:0)

您需要为每个帖子插入一个部分。像这样更新您的原始addPostsToList方法:

- (void)addPostsToList:(NSArray *)posts {
    NSInteger startingSection = [self.postsList count];
    NSRange sectionRange = NSMakeRange(startingSection, posts.count);
    [self.postsList addObjectsFromArray:posts];
    [self.tableView insertSections:[NSIndexSet indexSetWithIndexesInRange:sectionRange] withRowAnimation:UITableViewRowAnimationAutomatic];
}

答案 1 :(得分:0)

您正在使用计数,但您应该使用 count - 1 index从0开始

indexSetWithIndex:[self.postsList count ...