当我回到主视图控制器时,我遇到了一个异常错误。
当用户在应用程序中注册时,它会创建一个唯一的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再次运行。任何帮助将不胜感激,谢谢!
答案 0 :(得分:2)
当你致电performSegueWithIdentifier
时,它会加载一个与" beginInduction"相关联的新视图控制器。标识符,而不是返回到您可能使用前一个performSegueWithIdentifier
创建的现有实例。你要做的是使用展开segue。
更多详情请见此链接。
https://developer.apple.com/library/ios/technotes/tn2298/_index.html
或者,您可以使用popToRootViewControllerAnimated
或popToViewController
或popViewController
或dismissViewController
方法返回到以前的视图控制器