gpt4 book ai didi

ios - 在 iOS 中调用插入行到 IndexPath 后由于某种原因不保存数据

转载 作者:行者123 更新时间:2023-11-28 18:55:54 25 4
gpt4 key购买 nike

我的应用程序中有一个 UITableView,我让用户向表中添加行。我通过调用“insertRowAtIndexPath”来做到这一点:

- (IBAction)addRow:(id)sender {

NSString *theObjectToInsert = [NSString stringWithFormat:@"Row #: %lu", (unsigned long)[self.tableData count]];
[self.tableData addObject:theObjectToInsert];
NSLog(@"What is the count of the collection? %lu", self.tableData.count-1);
NSIndexPath *newPath=[NSIndexPath indexPathForRow:self.tableData.count-1 inSection:0];
[self.myTable insertRowsAtIndexPaths:@[newPath] withRowAnimation:UITableViewRowAnimationAutomatic];
[self.myTable scrollToRowAtIndexPath:newPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];


}

我发现的问题是,在添加必要的行之后,我没有按照我认为应该的方式保存数据。这是应该存储数据的方法:

- (void)saveAction {

//I iterate through my entire UITableView to tally up the data from all of the rows
NSMutableArray *cells = [[NSMutableArray alloc] init];
for (NSInteger j = 0; j < [self.myTable numberOfSections]; ++j) {
for (NSInteger i = 0; i < [self.myTable numberOfRowsInSection:j]; ++i) {
if ([self.myTable cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:j]]) {
[cells addObject:[self.myTable cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:j]]];
}
}
}

NSLog(@"The number of table rows are: %lu", (unsigned long)[cells count]);

}

出于某种原因,这只打印出“4”,即使我添加了更多。谁能看出我做错了什么?

最佳答案

为什么要将 UITableViewCell 保存在单元格数组中?而您已经拥有 self.tableData 数组中的所有数据。永远不要存储/访问 UI 对象,只需使用数据模型。

UITableView 文档开始,cellForRowAtIndexPath 如果单元格不可见则返回 nil。因此,即使您有 10 个单元格,如果只有 4 个单元格可见,那么此方法将为剩余的 6 个单元格返回 nil。

- (nullable __kindof UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath;   
// returns nil if cell is not visible or index path is out of range

关于ios - 在 iOS 中调用插入行到 IndexPath 后由于某种原因不保存数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33139553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com