Ios 实例化模态视图控制器将冻结应用程序-Xcode 7可能存在问题

Ios 实例化模态视图控制器将冻结应用程序-Xcode 7可能存在问题,ios,xcode6,modalviewcontroller,xcode7,presentviewcontroller,Ios,Xcode6,Modalviewcontroller,Xcode7,Presentviewcontroller,我在iOS应用程序中演示了一个视图控制器。问题是没有崩溃,只要调用presentViewController:animated,应用程序就会冻结。统计数据显示CPU使用率为100%,即使手动关闭应用程序,CPU使用率也不会下降 UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; CustomModalViewController *vvc = [sb instantiateViewControllerW

我在iOS应用程序中演示了一个视图控制器。问题是没有崩溃,只要调用presentViewController:animated,应用程序就会冻结。统计数据显示CPU使用率为100%,即使手动关闭应用程序,CPU使用率也不会下降

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
CustomModalViewController *vvc = [sb instantiateViewControllerWithIdentifier:@"CustomModalViewController"];
if(!vvc){
    NSLog(@"ERROR!!! vvc is null");
}
NSLog(@"instantiate modal view controller");

vvc.providesPresentationContextTransitionStyle = YES;
vvc.definesPresentationContext = YES;
vvc.data = data;
NSLog(@"before presenting modal view controller");
[vvc setModalPresentationStyle:UIModalPresentationOverCurrentContext];
[self presentViewController:vvc animated:YES completion:nil];
我尝试在自定义类的viewDidLoad中打印一些调试语句,但这些语句也没有被调用

我不明白为什么视图控制器没有显示。任何帮助都将不胜感激。我想知道在什么情况下,你的应用程序在推一个视图控制器时会进入无限循环,还是因为其他原因

更新:

这个错误发生在我更新到XCode 7之后。不确定,但我想这可能是新SDK的一个问题——UIKit或LLVM编译器。我用Xcode 6.4将我的项目复制到另一个mac上,错误消失了!!!我也没有更改任何会导致此问题的生成设置


有关于如何进行的建议吗

好吧,这很奇怪,但我希望它能有所帮助:我也有同样的问题,CPU跳到100%,而视图从未显示出来。在Xcode 6.4中工作得非常好。在Xcode 7.1中,在我调用的视图上,我得到了一个带有占位符文本“Notes:”的UITextView。我发现,如果清除占位符文本,视图将加载,所有过程都会正常执行。如果占位符文本长度大于9个字符,视图也会正常加载和执行过程。如果占位符文本长度>0且<10,则不能使用。100%时无视图和CPU。我知道这很奇怪,但希望它能帮助你。和你一样,我没有错误或控制台输出要显示,它只是旋转

编辑供参考,在故事板中清空占位符文本,并在代码中设置它,无论长度如何,都可以解决这个问题

我有一个默认字符串为“Text”的UITextView,在CPU负载为100%时失败。我只是把占位符放在代码中,但直到我从故事板中删除“文本”才起作用


我的代码是用Xcode 6开发的,在发送了一个用Xcode 7构建的新应用版本后,我注意到了这个错误。

我遇到了与OP和答案中描述的相同的问题:

  • 显示视图控制器(在我的示例中为
    PageViewController
  • 显示的视图控制器有一个按钮,按下该按钮时显示另一个视图控制器以添加注释
  • 在显示“备注”视图控制器时,将应用程序移到后台。然后把它带回到前景
  • 该应用程序现在已冻结。当连接到调试器时,它似乎被无限期冻结,但在prod中运行时它会崩溃。CPU被固定在100%,内存使用率正在攀升 我最终跟踪到我的“Note”视图被设置为第一个响应者,当我的视图出现时,通过
    覆盖func view willbeen(uu.animated:Bool)
    ,我将Note
    UITextView
    设置为第一个响应者,
    noteTextView.becomeFirstResponder()

    如果我删除了这一行,并且从未点击note字段,我的应用程序将从后台成功恢复

    为了解决这个问题,我最后添加了观察者,以观察应用程序何时移到后台,何时移到前台。在这些观察者中,我分别使note文本视图成为第一响应者和第一响应者

    override func viewDidLoad(){
    super.viewDidLoad()
    //在此处设置视图控制器。
    NotificationCenter.default.addObserver(self,选择器:#选择器(self.appmovedtoforground),名称:UIApplication.willEnterForegroundNotification,对象:nil)
    NotificationCenter.default.addObserver(self,选择器:#选择器(self.appMovedToBackground),名称:UIApplication.didEnterBackgroundNotification,对象:nil)
    }
    @objc func appMovedToForeground(){
    self.noteTextView.becomeFirstResponder()
    }
    @objc func appMovedToBackground(){
    self.noteTextView.resignFirstResponder()辞职
    }
    

    我不确定我是否应该采取不同的措施来防止这个问题,或者当应用程序进入后台时,辞职第一响应者是否是最好的做法,但这似乎对我有效。

    在演示另一个视图控制器后,你想要透明的背景吗?是的。我还想显示背景视图。这在大多数情况下不起作用。你可能必须编写自定义转换以使背景半透明。我还尝试了UIModalPresentationPopover。同样的问题。你知道为什么会这样吗??我发现有一个崩溃,我至少可以检查堆栈跟踪。如果你想我在这里分享的例子,使透明的背景。天哪,这就是它!我尝试了很多事情,就是这样。同样的交易,Xcode 7.1,UITextView,我在情节提要上有占位符副本,并在我的视图控制器中设置它。对我来说,解决办法就是清空故事板上的文本,并只在代码中设置它。这就解释了为什么它会卡在NSString isEqualToString循环中,有点:)这并没有给出根本原因,但我还是接受它!!!在我的案例中也是如此。请为这个问题找到一个合适的名称。它将人们重定向到这个问题和另一个问题的解决方案。我有一个项目,以前是在Swift 3和Xcode 8.3中。现在我不得不切换到Xcode 11,一些控制器在出现时没有出现。CPU和内存上升,屏幕冻结,没有错误。但我没有看到任何UITextView。还有其他原因吗?