我有一个UITableView,我想在其中插入和删除行。
如果我有一个包含 10 个值的数组,并且从包含所有行的表视图开始,则表显示正常。然后,如果我想过滤掉除[0,1,5]之外的所有内容。然后,我完成删除索引路径处的行的过程:[2,3,4,6,7,8,9],返回的行数为3。我不必更改我的单元格呈现代码,它显示行:[0,1,5]。
但是,如果在过滤完所有内容后,我想返回到这个表,并从persistence中加载包含行[0,1,5]的表,我就有麻烦了。该表加载行数:3,并呈现单元格:[0,1,2]。
我尝试用0行初始化viewDidLoad中的表,然后在viewDid众目睽睽中调用插入行:[0,1,5]-但这会引发异常:
*** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-2380.17/UITableView.m:909
而且我已经验证了在viewDidLoad中,打印的行数是0,而就在抛出这个错误之前,打印的行数是3。
如果我改为插入[0,1,2]则进行编辑-这有效...但是再一次...我最终需要[0,1,5]出现。
- (void) viewDidAppear:(BOOL) animated { [super viewDidAppear:animated]; NSArray *initializing_indeces = @[[NSIndexPath indexPathForRow:0 inSection:0], [NSIndexPath indexPathForRow:1 inSection:0], [NSIndexPath indexPathForRow:5 inSection:0]]; [self.userDataTable insertRowsAtIndexPaths:initializing_indeces withRowAnimation:UITableViewRowAnimationAutomatic]; }
- (int) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // Using different booleans, but the gist: if (viewDidLoad) return 0; if (viewDidAppear || filtered) return 3; if (expanded) return 10; }
- (UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CELL"]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CELL"]; } [cell.textLabel setText:[NSString stringWithFormat:@"%i",indexPath.row]]; return cell; }
首先,在您的案例中numberOfRowsInSection
returnNSInteger
我不知道什么是重生。我假设该问题必须连接到代码中的此部分,
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
通常,您在这些数据源方法之一中犯了错误。也许不可能说出到底出了什么问题,但它可能是这样的:你正在告诉表格视图
的编号的行
数(在你的例子中是10),而在单元格中,
你只处理10 - 1行。如果您向我们展示您的数据源的实现,则告诉发生了什么会容易得多。
@鱼stix
[单元格文本标签集文本:[NS字符串使用格式:@“%i”,索引路径.row]];
代码中的这个方法清楚地表明,文本将是带有indexPath的NSString。行的值。现在,当您删除行和数据源时,从10=[0,1,5][2,3,4,6,7,8,9]
到3=[0、1,5]
。您的数据源已减少为计数为3的数组。因此,您将只获得三行作为返回的bbynumberOfRowsInSection
方法。这三行将具有这些indexPath。行的0、1、2
。因此,您得到的是0,1,2
,而不是0,1,5
。
如果在< code > cellforrowatdinexpath 方法中打印indexPath(过滤后),您将看到它们分别为[0,0] [0,1] [0,2],表示第0节和第0、1、2行。因此你的结果
如在得到你想要的结果。这样做。采取属性@property(保留,非原子)NS阵列*数据阵列;
在viewDidLoad:self中。dataArray=[NSArray阵列WithObjects:@“0”,@“1”,@”2“,@”3“,@“4”,@(5),@(6),@”7“,@(8),@“9”,nil];
在numberOfRowsInSection中返回[array count];
在cellForRow中[cell.textLabel setText:[self.dataArray objectAtIndex:indexPath.row]];
现在只需在viewWillAppear或任何你想要的地方将dataSource(我指的是dataArray)更改为过滤或扩展状态,并使用[self.tableView reloadData]重新加载表数据;
希望我是清楚的。干杯,玩得开心。
我必须自己跟踪地图:
- (UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CELL"]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CELL"]; } int row = indexPath.row; if (filtered) { // Translate 0 - 0 // Translate 1 - 1 // Translate 2 - 5 } [cell.textLabel setText:[NSString stringWithFormat:@"%i", row]]; return cell; }
我最后使用了一个NSMutableArray,过滤后它变成了[0,1,5],所以访问这个数组的索引indexPath.row of 2返回5。
问题内容: 当我测试新插件时,不断抛出异常:java.lang.IllegalArgumentException:插件已初始化!请帮忙!这是代码: 我知道您只应该为每个插件声明一个JavaPlugin类,我认为我正在这样做。但它一直在说: 我真的需要测试此插件,看看它是否有效,任何帮助将不胜感激!谢谢! 问题答案: stacktrace清楚地指出了问题出在哪里。什么是堆栈跟踪,如何使用它来调试应用
问题内容: 我有一些已经在使用的JBoss webapp,还有一个懒惰的初始化问题。因此,建议我在Spring进行调查并使用。 但是,我仍然会收到错误消息,希望您能对我有所帮助?要使用Spring OEM过滤器,我还需要在应用程序中进行哪些更改? 我的设置是这样的: + jsf的东西。 我将其设置如下:web.xml applicationContext.xml: persistence.xml:
我正在尝试设置Application子类中的默认FirebaseApp: 看起来一切正常,但当我想将一些事件记录到FirebaseAnalytics时,我会得到这个错误:缺少Google_App_ID。已禁用Firebase分析。我不知道问题出在哪里。
我有一个受控输入,它接受名为的道具。该对象由其父组件传递给它,并在其中用观察者1异步初始化。 在父组件中: 我想用填充受控输入的初始状态。类似下面的内容,这不应该是反模式,因为状态只依赖于构造上的prop。 当我刷新受控输入时,出现以下问题: 的值为,因为观察者尚未触发。组件被构造并将分配给. 观察者激发,为用户分配一个复杂的对象,React重新呈现组件。这不会更改组件的状态,仍然是。 我被困在如
考虑以下代码: 以下是一些引用的标准 拷贝初始化 从cppreference复制引用的初始化 如果object是lvalue表达式,其类型是T或从T派生的,且具有相等或较少CV限定性,则该引用绑定到由lvalue标识的对象或其基类子对象。 如果object是lvalue表达式,其类型隐式转换为T或从T派生的类型,具有相等或较少CV限定性,则考虑源类型及其基类返回lvalue引用的非显式转换函数,并
你已经有了基本的页面布局和需要用的CSS以及JS文件。现在我们需要初始化我们的应用,比如在 my-app.js中 var myApp = new Framework7(); 上面这个例子中我们使用了 myApp 作为变量名存储 Framework7 初始化之后的实例。 这样初始化非常简单,但是Framework7 也提供了更多个性化的定制,只需要在初始化的时候传入一个配置对象即可。 var myA