gpt4 book ai didi

iOS UITableview 删除带有动画的行

转载 作者:行者123 更新时间:2023-11-29 02:40:59 29 4
gpt4 key购买 nike

我看到了很多关于它的问题,但没有找到解决我的问题的方法。

我有一个带有自定义单元格的表格 View 。在每个牢房里我都有一个计时器。当时间到了时,我发送一条消息来删除该行(这不是我使用消息接收的唯一地方)。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)theTableView{
return 1;
}

- (void) timesup:(NSNotification *)notification{
Data *data = notification.userInfo[@"data"];
NSUInteger index = [datas indexOfObject:data];
NSArray *deleteIndexPaths = [[NSArray alloc] initWithObjects:
[NSIndexPath indexPathForRow:index inSection:0],
nil];
[datas removeObjectAtIndex:index];
[self.tableView deleteRowsAtIndexPaths:deleteIndexPaths withRowAnimation:UITableViewRowAnimationFade];
}

- (NSInteger)tableView:(UITableView *)theTableView numberOfRowsInSection:(NSInteger)section
{
if(datas.count > 0){
return datas.count;
}

// Display a message when the table is empty
UILabel *messageLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];

messageLabel.text = @"No data, pull to refresh";
messageLabel.textColor = [UIColor blackColor];
messageLabel.numberOfLines = 0;
messageLabel.textAlignment = NSTextAlignmentCenter;
[messageLabel sizeToFit];

self.tableView.backgroundView = messageLabel;
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
return 0;
}

我收到此错误(取决于我使用该应用程序时有多少数据):

Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (4) must be equal to the number of rows contained in that section before the update (6), plus or minus the number of rows inserted or deleted from that section (0 inserted, 1 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).

当我有大量数据超时时,会发生错误。

注意:如果我不使用“deleteRowsAtIndexPaths”,仅从数据中删除并重新加载表,它就可以完美工作

最佳答案

昨天我解决了你在 N.B. 中写的类似问题。与您建议的方式相同。我认为当表数据源混淆时会出现此问题。为了克服这种情况,一个可能的解决方案是实现正确的行删除流程。

BOOL isDeleteInProgress;

步骤:

  • 当您的计时器事件触发(调用)时,将 isDeleteInProgress 设置为 YES。
  • 如果由于另一个计时器而再次调用,请检查 isDeleteInProgress 是否为 NO 然后仅设置为 YES
  • 现在编写下面的代码来删除行

    [self.tableView 开始更新];

    [self.tableView deleteRowsAtIndexPaths:deleteIndexPaths withRowAnimation:UITableViewRowAnimationFade];

    [self.tableView endUpdates];

  • 行删除成功后,将 isDeleteInProgress 设置为 NO。

这将阻止连续调用删除并可能阻止您遇到此( Unresolved )异常。

我已经阅读了您的评论(要显示的任何一段代码(一周前开始 iOS 开发 :D))所以我添加了一个可能对您有帮助的伪代码。

- (void)timerEventFire:(NSTimer*)timer {
if(!isDeleteInProgress) {
//write code to delete the rows
//invalidate timer
//isDeleteInProgress = NO;
}
}

祝你好运!

关于iOS UITableview 删除带有动画的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25804384/

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