在 JSON 请求后用新数据刷新视图控制器

Refresh view controller with new data after JSON request

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)main JSON pull 方法的末尾。

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

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

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