当登录用户打开我的应用程序时,它们会从我的AppDelegate发送到主TabBarController,如下所示:
UITabBarController *tabBar = (UITabBarController *)self.window.rootViewController;
tabBar.selectedIndex = 2;
// (this is MainViewController in the tab bar)
现在,用户在MainViewController中。当用户选择他们想要输入的特定聊天时,他们会被发送到ChatViewController(而不是TabBarController),如下所示:
[self performSegueWithIdentifier:@"showChatSeg" sender:self];
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([segue.destinationViewController isKindOfClass:ChatViewController.class]){
ChatViewController *destinationViewController = (ChatViewController *)segue.destinationViewController;
if(self.createdDialog != nil){
destinationViewController.dialog = self.createdDialog;
self.createdDialog = nil;
}else{
QBChatDialog *dialog = [ChatService shared].dialogs[self.selectedChat];
destinationViewController.dialog = dialog;
}
}
}
当发生这种情况时,我发现内存使用量激增,这是有道理的。但是,当用户离开ChatViewController并返回MainViewController时,如下所示:
- (IBAction)backButton:(id)sender {
[self performSegueWithIdentifier:@"fromChatToDashSeg" sender:nil];
// This is a storyboard segue back to the MainTabBarController
}
我收到以下警告:
Attempt to present <MainTabBarController: 0x17ef28d0> on <ChatViewController: 0x17d6c940> whose view is not in the window hierarchy!
内存使用情况保持不变。当用户再次进入聊天时,内存继续增加。我不是正确地解雇发送视图控制器吗?
答案 0 :(得分:0)
这是因为您尝试执行segue只是为了回到原来的位置。您需要做的就是通过调用[self dismissViewControllerAnimated:YES completion:nil];
来关闭当前的模态视图控制器。每当您向视图堆栈添加模态视图时,您希望调用此方法退出,除非您的意图是在模态顶部添加另一个视图。
答案 1 :(得分:0)
你正在做的事情不是“回来”,而是在你已经拥有的那个视频之上呈现上一个视图的副本。这就是为什么内存正在积累的原因,因为你只是在彼此之上堆叠越来越多的视图。假设您使用模态segue来显示聊天视图,请尝试调用:
[self dismissViewControllerAnimated:YES completion:nil];