Ios dismissViewControllerAnimated导致再次加载同一视图控制器

Ios dismissViewControllerAnimated导致再次加载同一视图控制器,ios,cocoa,ios7,Ios,Cocoa,Ios7,我的设想如下: 当应用程序加载时,第一个控制器是 应用程序第一次启动时,加载控制器B,该控制器显示视频。A在其视图显示方法中使用performsguewithidentifier加载B。B B使用mpmovieplayervewcontroller显示视频。B使用MPMoviePlayerPlaybackDidFinishNotification识别视频已完成,然后执行: [自解除视图控制器激活:未完成:无] 解除呼叫导致B重新加载(电影再次播放),控制台中出现以下错误: :CGImageCre

我的设想如下:

  • 当应用程序加载时,第一个控制器是
  • 应用程序第一次启动时,加载控制器B,该控制器显示视频。A在其
    视图显示
    方法中使用
    performsguewithidentifier
    加载B。B
  • B使用
    mpmovieplayervewcontroller
    显示视频。B使用
    MPMoviePlayerPlaybackDidFinishNotification
    识别视频已完成,然后执行:
    [自解除视图控制器激活:未完成:无]
  • 解除呼叫导致B重新加载(电影再次播放),控制台中出现以下错误:

    :CGImageCreate:无效的图像大小:0 x 0


    如何解决此问题?

    问题在于在ViewController A的
    viewdide:
    方法中显示ViewController B的逻辑

    当B完成并解除时,A的
    视图显示:
    (再次)将被调用,这反过来将再次显示B,循环将继续,直到某个东西腐烂

    基本上:
  • viewDidLoad
  • viewdide出现:
  • B礼物
  • 解雇
  • viewdide出现:
  • B礼物
  • 你应该重新思考你的逻辑,因为在这一点上,有很多方法可以做到这一点


    或者。。。如果此电影必须只播放一次,则您可以在A的
    viewDidLoad
    中显示B。

    我将设置一个类似于didMoviePlay的属性,并检查在
    viewdide:
    中是否显示该电影以决定是否播放该电影。这样,如果电影播放出现错误,您可以决定如何从那里继续。

    调用
    dismissViewControllerAnimated
    将导致在第一个视图控制器A上再次调用
    viewdide

    但是,您可以使用方法
    -(BOOL)[UIViewController isBeingPresented]
    来区分首次显示此视图控制器的时间

    - (void)viewDidAppear:(BOOL)animated {
      [super viewDidAppear:animated];
    
      if ([self isBeingPresented]) {
        [self performSegueWithIdentifier:@"YourSegueIdentifier" sender:self];
      }
    }
    

    逻辑没有问题-A在ViewDid中调用B只出现一次。在解除后,根本不会调用的viewDidAppearcall@ErikSapir:好的。然后。。。请在您的问题中添加相关代码。在B解雇后,应调用A的视图(上面的步骤5)。如果不是的话,那就大错特错了。这就是我正在做的事情——只调用一次viewDiDAppear。在尝试取消B之后,ViewDid似乎甚至没有被调用