gpt4 book ai didi

ios - 从另一个方法中取消在循环中创建的所有 NSTimers

转载 作者:行者123 更新时间:2023-11-28 19:50:59 25 4
gpt4 key购买 nike

为了将单元格添加到 TableView,我从一个循环中创建了很多计时器:

 for (NSInteger i = 0; i < media.products.count; i++) {
NSDictionary *obj = [media.products objectAtIndex:i];
NSInteger timeInterval = [[obj objectForKey:@"TIME"] integerValue];
[NSTimer scheduledTimerWithTimeInterval:timeInterval target:self selector:@selector(addNewProductToTableView:) userInfo:obj repeats:NO];
}

我想在显示另一个 Controller 时取消所有这些,在 shouldSelectViewController 或 viewWillDisappear 中是这样的:

  NSLog(@"I've been called!");
// Doesn't seem to work :
[NSObject cancelPreviousPerformRequestsWithTarget:self];
[NSTimer cancelPreviousPerformRequestsWithTarget:self];
// Clean the table
self.dataSource = [NSMutableArray array];
[self.tableView reloadData];

当再次显示 tableView 时,之前和当前计时器的混合使单元格显示困惑。

或者,如果它更简单,我不介意破坏整个 Controller ,但也无法让它工作。

self.view = nil; // ? 

最佳答案

  1. 创建 NSMutableArray *timers;在您的 View Controller 的界面中

  2. 在viewDidload中初始化和分配timers = [[NSMutableArray alloc]init];

  3. 将循环代码更改为

    for (NSInteger i = 0; i < media.products.count; i++) {
    NSDictionary *obj = [media.products objectAtIndex:i];
    NSInteger timeInterval = [[obj objectForKey:@"TIME"] integerValue];
    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:timeInterval target:self selector:@selector(addNewProductToTableView:) userInfo:obj repeats:NO];
    [timers addObject:timer];
    }

无论你想让计时器失效

for (NSTimer *timer in timers)
[timer invalidate];
}

关于ios - 从另一个方法中取消在循环中创建的所有 NSTimers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29235413/

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