如何找到将更多部分插入UITableView的正确范围?

时间:2015-10-22 04:51:56

标签: uitableview

我意识到obj-c中的计数和索引之间存在差异。

对于这个问题和我的问题有意义,我将使用以下示例来演示。

我的_data.count从0开始。

在viewDidLoad之后,我获取并插入_data.count = 10

的部分
NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, _data.count)];   
[self.tableView insertSections:set
              withRowAnimation:UITableViewRowAnimationFade];

这可以正常工作,因为我现在有[0-9]部分。后来我添加了_data,其中_data.count = 12.然后我尝试像之前一样做一个简单的插入,但更改起始索引。

NSInteger sections = [self.tableView numberOfSections];
NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(sections, _data.count)];   
[self.tableView insertSections:set
              withRowAnimation:UITableViewRowAnimationFade];

我愿意天真地希望这会插入[10-11]的部分。部分= 10,但我的应用程序崩溃,例外'尝试插入第12部分,但更新后只有12个部分'

1 个答案:

答案 0 :(得分:0)

问题是我不明白NSRange是如何工作的。这是NSRange的结构。

typedef struct _NSRange {
  NSUInteger location;
  NSUInteger length;
} NSRange; 

我读到了关于NSIndexSet并意识到它提供了一些帮助,我利用它来帮助弄清楚如何正确解决这个问题。

使用前面的示例,这是我学习的关于索引集范围的内容。

NSLog(@"first index %ld", (unsigned long)[set firstIndex]);
/* logs 10 */

NSLog(@"last index %ld", (unsigned long)[set lastIndex]); 
/* logs 21 ? what the heck */

所以有了这些信息,我知道我所要做的就是从update _data.count中减去当前的节数。

NSInteger sections = [self.tableView numberOfSections];
NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(sections, _data.count-sections)];   
[self.tableView insertSections:set
              withRowAnimation:UITableViewRowAnimationFade];

既然我明白了什么是错的,我需要知道NSRange是如何工作的。所以我读到了它,很明显我收到这个错误的原因。第一个数字是起点,I.E。位置,然后第二个数字是移动的地方,I.E。长度。