首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在collectionView中通过iOS的目标c停止函数递归

如何在collectionView中通过iOS的目标c停止函数递归
EN

Stack Overflow用户
提问于 2016-07-05 06:12:37
回答 2查看 1.9K关注 0票数 0

编辑:我承认我的设计有问题。只要把我的计时器移到一个无UI相关的功能上,问题就解决了。

首先,我有多个账户。我有一个collectionView来加载一个帐户的信息。

第二,我有两个功能。一个是我的收藏品视图的cellForItemAtIndexPath函数。我在里面有一个计时器来调用另一个函数来更新登录帐户的数据。

代码语言:javascript
运行
复制
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {

    //updateUI methods..

    if (// a rare situation ){
         dispatch_async(dispatch_get_main_queue(), ^{
             NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:3.0
                           target:self
                           selector:@selector(refreshSingleVMStatusForTimer:)
                           userInfo:nil repeats:NO];
         });
     }
}

下面是refreshSingleVMStatusForTimer函数,它可以从互联网下载所有数据,然后调用[collectionView reloadData]进行更新。

代码语言:javascript
运行
复制
- (void) refreshSingleVMStatusForTimer :(NSTimer *) timer {

    //download the data from internet
    //parse the xml to useful data.

    [collectionView reloadData];
}

所以这两个函数变成了递归。

现在,如果我切换帐户,我的collectionView将在其中加载一个不同帐户的数据。但是递归仍然在运行,这将发生错误。

我不知道我是否清楚地解释了我的问题。如果你有什么问题,请告诉我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-05 06:32:03

正如Avi所提到的,这是一个设计问题,它不允许您停止递归:您不应该在-cellForItem:atIndexPath:中触发重新加载。这是给园丁们做的。把它移开。

如果有理由在那里这样做,隔离它,并问一个新的Q。

票数 3
EN

Stack Overflow用户

发布于 2016-07-05 06:37:49

您需要确保“罕见情况”最终评估为false。如果这个值不改变,递归循环就永远不会中断。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38196327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档