我有一个关于更新我的TableView的棘手问题,我使用不同的更新方法得到不同的结果,让我解释一下:
情况1:
我用[tbl reloadData];哪里tbl是我的TableView,以更新的TableView -按预期工作.
情况2: 我使用:
[tbl beginUpdates];
[tbl reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationRight];
[tbl endUpdates];
Run Code Online (Sandbox Code Playgroud)
tbl我的TableView 在哪里,indexPaths是一个包含TableView中存在的所有indexPath的数组.现在数组很好,它包含所有正确的indexPaths(双重和三重检查)但由于某种原因 - 这不能按预期工作.
现在我意识到这是一个XY问题(我问Y但我的问题确实是X因为我认为解决Y会解决X)而这只是因为我觉得解释X有点复杂(上述问题的结果)以一种简单的方式,所以如果可能的话,我宁愿避免这样做.
那么,直到我的问题:更新TableView的两种方式之间是否存在差异(当然除了动画位)或者我是否应该怀疑问题在其他地方?
编辑: 好的,我会尝试解释症状是什么:
在cellForRowAtIndexPath-method中,我为每个单元格添加一个按钮,其中指定的标签等于单元格的indexPath行,如下所示:
btn.tag = indexPath.row;
Run Code Online (Sandbox Code Playgroud)
我这样做的原因是我可以识别每个按钮,因为它们都调用相同的功能:
- (void)btnPressed:(id)sender
Run Code Online (Sandbox Code Playgroud)
当我然后更新单元格 - 因为单元格中的某些值已经改变 - 情境1使一切正常,情况2然而 - 混合标签,以便下次按下其中一个按钮时,它们不再具有正确的标签.
混音对我来说确实是随机的,但随机化的发生方式也不同,这取决于我先按哪个单元格按钮.我希望这能澄清我的问题.
我正试图了解UITableViews以及随之而来的一切.目前我有以下代码:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 10;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
[cell.textLabel setText:[NSString stringWithFormat:@"I am cell %d", indexPath.row]];
return cell;
}
- (IBAction)killItem {
NSIndexPath *indexToDelete = [NSIndexPath indexPathForRow:2 inSection:0];
[tbl deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexToDelete] withRowAnimation:UITableViewRowAnimationRight];
}
Run Code Online (Sandbox Code Playgroud)
启动"killItem"函数时出现以下错误:
由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无效更新:第0节中的行数无效.更新后的现有部分中包含的行数(10)必须等于该行中包含的行数更新前的部分(10),加上或减去从该部分插入或删除的行数(插入0,删除1).
我理解它的方式tableViews基本上有一个委托和一个数据源,其中数据源确定tableView中应该有多少行.通过stackoverflow的一些搜索,我发现当"数据源与现实不匹配"时,当它搜索不存在的行时,我已经删除了这个错误.
我可能已经弄错了,但这就是我的想法.所以我的问题是,如何让这些匹配,以便我可以避免这个错误?
作为参考,我在不了解我需要做什么的情况下查看了以下帖子:
由于未捕获的异常'NSRangeException'终止应用程序,原因:'*** - [NSMutableArray objectAtIndex:]:索引1超出边界[0 .. 0]'
添加[tbl reloadData], …
我正在尝试对我的地址簿中的所有数字进行统一更改,我想将我的国家代码(+46)添加到以0开头的所有数字,并认为我会为此制作应用程序.问题是如何以最好的方式做到这一点,看起来很难 - 很难.
通常的方式似乎是通过一个人选择器:http://developer.apple.com/library/ios/#documentation/ContactData/Conceptual/AddressBookProgrammingGuideforiPhone/Chapters/UI_Controllers.html#//apple_ref/doc/uid/TP40007744- CH5-SW4 - 但这意味着用户必须选择它想要更改的联系人,这必须是一种过于复杂的方式.
有没有办法遍历通讯录中的所有数字,更改/它,然后将它们放回去?
先谢谢你,Tobias Tovedal.