刷新 Tableview 控制器时 UIRefreshControl 崩溃

Posted

技术标签:

【中文标题】刷新 Tableview 控制器时 UIRefreshControl 崩溃【英文标题】:UIRefreshControl crashes while refreshing Tableview Controller 【发布时间】:2013-02-25 22:23:32 【问题描述】:

我无法刷新我的 TVC。当我向下拖动以刷新时,它崩溃了。 图标在那里,但随后它退出了。我敢肯定它很简单。还有一些类似的问题尚未考虑。

取自我的 viewDidLoad 方法体:

refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self
                   action:@selector(refreshInvoked:forState:)
         forControlEvents:UIControlEventValueChanged];
[self.tableView addSubview:refreshControl];

refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:title
                                                            attributes:@NSFontAttributeName:[UIFont fontWithName:@"Helvetica" size:13.0]];
[self refreshFeed];

指的是:

-(void)refreshFeed 

   RSSLoader* rss = [[RSSLoader alloc] init];    
   [rss fetchRssWithURL:feedURL
            complete:^(NSString *title, NSArray *results) 
                dispatch_queue_t downloadQueue = dispatch_queue_create("downloader",NULL);
                dispatch_async(downloadQueue, ^
                _objects = results;
                    [self.tableView reloadData];
                //completed fetching the RSS
                dispatch_async(dispatch_get_main_queue(), ^
     //               [(HeaderView*)self.tableView.tableHeaderView setText:title];
                    // [(ArticleItem*)self.tableView.]
                );
                );
    ];

【问题讨论】:

请在询问崩溃时包含崩溃日志,ACB 可能是对的,但为什么让我们猜测? @jrturton,这是真的。我的回答纯粹是基于一个假设,可能是完全错误的。 【参考方案1】:

UIRefreshControl 不是要添加为子视图...这样做会给您带来一些麻烦,您需要在 VC dealloc 上取消注册它的目标...否则您可能会遇到一些问题,当UIRefreshControl 调用您死掉的 VC(因为它不会保留对您的 VC 的弱引用或强引用)

【讨论】:

【参考方案2】:

将您的操作方法更改为:

[refreshControl addTarget:self
                   action:@selector(refreshFeed)
         forControlEvents:UIControlEventValueChanged];

看起来您指向的 refreshInvoked:forState: 不存在于 self 中。

【讨论】:

你也可以尝试实现- (void)refreshInvoked:(id)sender forState:(UIEvent *)event,保持addTarget部分不变。 答题体的解决方案瞬间解决了问题。现在是完成后关闭 refreshControl 的问题。 很高兴知道这一点。 “现在是在完成后关闭 refreshControl 的问题。” - 你不必关闭它。我会自动回到之前的状态。

以上是关于刷新 Tableview 控制器时 UIRefreshControl 崩溃的主要内容,如果未能解决你的问题,请参考以下文章

无法通过拉取刷新我的 JSON 数据以在 tableview 控制器中刷新

在 ParallaxBlur 控制器中刷新 TableView

嵌入式tableview ios 6的刷新控制器

删除 tableview 单元格并刷新视图控制器后刷新 tableview

添加另一个部分时将编辑的文本保留在自定义单元格中([tableView 刷新数据])

使用从popover pickerview中选择的字符串数组自动刷新tableview