【问题标题】:Black Screen when trying to refresh view controller尝试刷新视图控制器时出现黑屏
【发布时间】:2013-03-31 05:37:47
【问题描述】:

我正在为 iphone 开发一个单词搜索益智游戏,并且我正在尝试为应用程序实现一个重启按钮。重启按钮应该能够初始化一个新的视图控制器,生成一个新的拼图,并显示新的拼图。

到目前为止,在益智游戏视图中,我有一个按钮,单击它会使用模态 segue 打开暂停菜单视图。(暂停菜单有三个按钮,恢复、重新启动、主菜单。)然后我使益智游戏控制器成为暂停菜单的代表,当按下按钮时接收通知。恢复和主菜单按钮有效,但我无法使用重新启动按钮重新加载视图。谜题在一个容器视图中,它有一个集合控制器,用于创建网格并显示字母。

使用我拥有的当前代码,当我单击重新启动按钮时,我只看到一个仅显示导航栏的黑屏。但是,一旦我单击暂停菜单按钮(位于导航栏中),然后单击暂停菜单中的恢复按钮,我就会看到带有新生成的谜题的视图。

下面是pauseMenuController中的代码:

- (IBAction)IBARestart:(id)sender {
         [self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
         [self.delegate goToRestart];
      }

现在这是我的拼图游戏控制器中的代码:

  -(void)goToRestart{        
     self.view = nil;
     [self.view.window setNeedsDisplay];

    PuzzleCollectionControllerViewController *puzzleInstance = [self.childViewControllers lastObject]; 
        puzzleInstance.view = nil; 
        [puzzleInstance.view setNeedsDisplay]; // I tried reloading the cointainer view too, but it still shows black screen


    }

有人知道为什么会显示黑屏吗?提前致谢

【问题讨论】:

  • 不要将视图控制器的主视图设为 nil,而是尝试将 VC 本身设为 nil。然后用一个新实例重新启动它。显示您的暂停和恢复按钮的 sn-ps 会有所帮助。

标签: iphone ios objective-c


【解决方案1】:

我不确定这是否足以解决您的问题..

但我对此的担忧是: 为什么你在重启时“nil”self.view?如果这样做,视图为“nil”,因此不会显示任何内容,对于uzzleInstance.view 也是如此。

您可以在 viewDidUnload 上为它 nil/释放内存,因为视图将在 viewDidLoad 上再次设置,但通常我只是“nil”/“dealloc”任何属性、插座等(在 viewDidUnload 或 dealloc 上,取决于我在哪里设置/重新设置它们)而不是视图本身。 “setNeedsDisplay”只会“重绘”视图,但如果它为零,恐怕没有什么可重绘的。所以我很确定这是你的问题。

有什么不同,或者当您按下“恢复”(代码?)时发生了什么。

【讨论】:

  • 我尝试使用 ViewDidUnload 释放内存,但该方法已被 ios 6 弃用。我最初在 self.view 上执行“nil”的原因是因为我想强制 ViewDidLoad 再次运行。我的大部分逻辑都在 viewDidLoad 中,但我唯一拥有的是一个用于拼图的计时器。至于当我按下恢复时,我唯一拥有的就是一种恢复我为拼图所拥有的计时器的方法。
  • 只有在不使用 ARC 时才需要 dealloc。您无法确定何时调用 viewDid(Un)load,除非视图第一次出现在屏幕上。 Ios 可能会在内存不足的情况下(当它不在屏幕上时)卸载视图,并在视图回到屏幕上时再次加载它。但是您可以使用 viewWillAppear ,每次在视图出现之前都会调用它。因此,只需创建一个您在 viewDidLoad 和 viewWillAppear 中调用的方法“updateUI”。希望这会对你有所帮助:-)
  • 是的,我试过了,但还是不行。我需要实现一个类别视图来选择以拼图为主题的单词,所以我的解决方法是在 goToRestart 方法中使用 [self.navigationController popViewControllerAnimated:true]。无论如何感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2022-11-18
  • 1970-01-01
  • 1970-01-01
  • 2017-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多