2015-09-26 63 views
1

我正在开发一个基于iOS 9的SDK的应用程序,这是我第一次使用Storyboards,我有20个视图控制器,每个场景都有Next/Previous按钮可以前后移动。前程无忧!如果我从场景1移动到例如场景15,我收到内存警告,然后应用程序崩溃。我已经搜索,似乎有方法称为unwind segue,但似乎这是回去!这就像dissMiss方法。故事板缓存和接收内存警告

我每个场景与线连接在Interface Builder:

enter image description here

这里是赛格瑞的设置:

enter image description here

,如果你帮我走出我将不胜感激。

编辑:

我试图以编程方式呈现视图控制器,但结果是一样的! 。

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
    WhatIsDino *vc = (WhatIsDino*)[mainStoryboard instantiateViewControllerWithIdentifier:@"WID"]; 
    [self presentViewController:vc animated:YES completion:nil]; 
+0

记忆警告是在您第一次从1变为15时发生的,还是会开始后一点? –

+0

故事板游戏不应该指向前一个场景。相反,关闭呈现的视图控制器。最简单的方法就是放松休息。 – jlehr

+0

@AbubakrDar内存将在每个场景显示后占用。 –

回答

2

似乎这是一个错误的方法问题,而不是故事板。

让我猜,因为之前你点击箭头按钮,故事板之前你用来改变你的应用程序的rootViewController到下一个/上一个屏幕。因此,一旦您设置了新的rootViewController,之前的屏幕就会释放并从内存中释放。

现在你有模式呈现每一个视图控制器,其中涉及创建新UIWindow和加载所有层次的你的屏幕和保持以前的下面新建一个所以其持有的内存和你一起离开内存崩溃。

那么,你可以用故事板做rootViewController的方法,因为它只是另一种在开发过程中管理屏幕的方式。故事板提供了附加功能,如赛格,静态表格视图单元格,一般色调颜色等。 [UIStoryboard -instantiateViewControllerWithIdentifier:]是您可能会感兴趣的方法。

但我宁愿推荐你去看看UIPageViewController,它就像一个屏幕容器。不幸的是,它不能在你的场景中出现(因为赛格的特殊方式),所以你必须使用-instantiateViewControllerWithIdentifier:方法。您可以像对待rootViewController之前那样对待UIPageViewController的内部视图控制器。

+0

对不起,我只是改变了从segues到编程的模式转换,但结果是一样的! ! !你有任何示例代码或什么? –

+0

使用这段代码(查看我编辑过的问题)和相同的结果 –

+0

是的,结果确实是一样的 - 你的代码基本上和segue做的一样。你应该改用'UIPageViewController'或回到'rootViewController'方法(后者不是一个好的解决方案)。在页面视图控制器上使用' - setViewControllers:direction:animated:completion:'方法更新屏幕 - 而不是最后一行。互联网上有很多教程。翻过这个。您可以忽略设置委托http://www.appcoda.com/uipageviewcontroller-storyboard-tutorial/ – ReDetection

0

您还可以导航,无需继续和我认为简单的方法。

如果您想从Class1导航到Class 2,请按照下列步骤操作。

1)在Class 1中,导入Class2。

2)在你的按钮Action中,写下这段代码。

Class2 * next = [self.storyboard instantiateViewControllerWithIdentifier:@“Class2 Identifier name”]; [self。navigationController pushViewController:next animated:YES];

不要忘记在故事板中给出特定类的属性检查器中的“故事板ID”中的标识符名称。

不需要添加塞格,你的故事板看起来很干净。

+0

没有成功,导致相同的问题 –

+0

在我的一个相同的情况下,它为我工作!您可能需要使用其他解决方案。祝您好运! –

0

问题是,您正在视图控制器后添加视图控制器与模态演示文稿。这会导致每个视图控制器都被添加到前一个视图控制器之上,并且所有这些视图控制器都会使用越来越多的内存进行累加。

使用导航控制器和按钮也将视图控制器堆叠在一起。

如果您使用storyboard,nibs或手动创建视图控制器,则会出现此问题。

如果你有一个设计,用户可以在一系列视图控制器中移动,那么你可能想在推送/呈现一个新视图控制器之前关闭前一个。

您可以不使用动画关闭以前的视图控制器,然后在每次要显示新视图控制器时都显示新的视图控制器并避免内存问题。我不得不试验它以获得我之后的效果,但这就是我的建议。

+0

谢谢!我想我必须改变用户界面并制作菜单!或者类似的东西 –