0
NSString * storyboardName = @"storyboardX";
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle: nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"viewControllerX"];
[vc.view setNeedsDisplay];

在另一个线程中完成 JSON 请求后,我试图刷新视图控制器中的显示。数据正确刷新,但视图没有。我在数据拉取方法结束时尝试 setNeedsDisplay,但它因 NSRangeException 索引 0 超出范围而崩溃。我认为这是因为上面的视图控制器没有正确实例化,或者当前视图没有被释放。ARC 已开启。

我也尝试[vc.view viewDidLoad]过同样的结果。

上面的代码位于(void)mainJSON pull 方法的末尾。

4

1 回答 1

1

1)您的 JSON 拉取可能没有在主线程中执行(我假设这是因为您没有显示它,如果不是,如果 json 是从服务器获取的,无论如何它应该是)并且 GUI 代码可以'不能在后台线程上调用。

2)但是,您无论如何都不应该做您正在尝试的事情,除非您确实想要加载视图控制器而不是刷新已经加载的现有视图控制器。- 您拥有的代码将创建一个全新的视图控制器实例,但如果您现在已经有一个显示,您将拥有同一个视图控制器的两个重复实例。

您应该向视图控制器添加一个方法来重绘其内容。然后当 JSON 准备好时触发 NSNotification。让您的视图控制器监听通知并调用正在刷新视图的方法。

于 2015-07-08T22:33:27.450 回答