【问题标题】:Exception because of UIRefreshControl由于 UIRefreshControl 的异常
【发布时间】:2012-11-02 16:29:37
【问题描述】:

我是第一次使用 UIRefreshControl,在加载刷新控件时出现异常。

这是我的声明:

self.refreshControl = [[UIRefreshControl alloc] init];
self.refreshControl.tintColor = [UIColor grayColor];
[self.refreshControl addTarget:self action:@selector(refreshView:) forControlEvents:UIControlEventValueChanged];
[self.actualitesTableView addSubview:self.refreshControl];

这是我的功能:

- (void)refreshView:(UIRefreshControl *)sender {
    [self performSelectorInBackground:@selector(threadAction) withObject:nil];
}

- (void)threadAction {
    [self choixMAJ];
    NSLog(@"OK1");
    [self.refreshControl endRefreshing];
    NSLog(@"OK2");
}

当我使用 choixMAJ() 方法时,它可以完美运行。

一切正常并记录了 OK2,但之后,当刷新控件消失时,应用程序因以下错误而崩溃:

*** -[__NSArrayM removeObject:]: message sent to deallocated instance 0x655a1a0

我不明白为什么.. 有什么想法吗?

【问题讨论】:

  • 好吧,对于初学者,您不应该在后台线程上调用 -endRefreshing。 UIKit 方法(包括那个)应该在主线程上执行。不过,我不确定这是否真的导致了您的问题。
  • 你是对的。发表您的评论作为答案,我会接受 :) 非常感谢!
  • addSubview: 调用是不必要的。通过简单地设置 UITableViewController 子类的 refreshControl 属性,您已经处理好了。

标签: ios ios6 uirefreshcontrol


【解决方案1】:

首先,您不应该在后台线程上调用 -endRefreshing。 UIKit 方法(包括那个)应该在主线程上执行。不过,我不确定这是否真的导致了您的问题。

谢谢 shusta,它对我帮助很大!

【讨论】:

    【解决方案2】:

    这里的答案是正确的,为了解决这个问题,我做了以下事情。 我在主线程中设置了一个计时器来监视布尔值。当您准备好停止复习时...在您的子线程中将该布尔值设置为 true。计时器会看到并从主线程调用 endRefreshing 函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-11
      • 1970-01-01
      • 1970-01-01
      • 2015-10-07
      • 1970-01-01
      • 2012-10-04
      • 1970-01-01
      相关资源
      最近更新 更多