segue执行后再次调用ViewDidLoad

时间:2016-03-03 16:09:59

标签: ios swift segue

当我回到主视图控制器时,我遇到了一个异常错误。

当用户在应用程序中注册时,它会创建一个唯一的CloudKit记录。保存操作完成后,将从cloudKit saveRecord关闭广播NSNotification,该关闭向用户显示警报。当接受警报时,将执行segue到新的viewController。

当回到主视图控制器时,它会运行viewDidLoad& viewDid再次出现,导致各种函数停止工作。我发现我的主视图控制器的原始实例仍在内存中,可以访问。

我认为这个问题可能与线程有关,而performForSegue被调用主线程,虽然我正在使用GCD,但情况并非如此。

这是我的代码:

保存功能:

func saveRecord(newUser: CKRecord) {

database.saveRecord(newUser) { record, error in

  if error != nil {

    print(error)
    Properties.registrationError = error

  } else {

    Properties.registrationSuccess = record
    print(record)
  }

    NSNotificationCenter.defaultCenter().postNotificationName(Key.Registration, object: self)
 }
}

收到saveRecord通知时:

func registrationComplete() {
 dispatch_async(dispatch_get_main_queue()) {

  self.pleaseWait.alpha = 0
  self.stopIndicator()
  print("stop indicator")

  if Properties.registrationError != nil {

    self.displayAlert("Registration Failed", error: "\(Properties.registrationError!.localizedDescription)", performAction: .None)

  } else {

    self.displayAlert("Registration Completed", error: "Press OK to begin induction", performAction: .BeginInduction)
  }
 }
}

按下确定时:

self.performSegueWithIdentifier("beginInduction", sender: self)

为了测试我在新视图出现时直接回到主控制器。此时,原始控制器的viewDidLoad再次运行。任何帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:2)

当你致电performSegueWithIdentifier时,它会加载一个与" beginInduction"相关联的新视图控制器。标识符,而不是返回到您可能使用前一个performSegueWithIdentifier创建的现有实例。你要做的是使用展开segue。

更多详情请见此链接。

https://developer.apple.com/library/ios/technotes/tn2298/_index.html

或者,您可以使用popToRootViewControllerAnimatedpopToViewControllerpopViewControllerdismissViewController方法返回到以前的视图控制器