【发布时间】:2016-03-04 06:00:42
【问题描述】:
我在转回主视图控制器时遇到异常错误。
当用户在应用程序中注册时,它会创建一个唯一的 CloudKit 记录。保存操作完成后,会从 cloudKit saveRecord 闭包中广播 NSNotification,该闭包会向用户显示警报。当接受警报时,将执行对新 viewController 的 segue。
当返回主视图控制器时,它会再次运行 viewDidLoad 和 viewDidAppear,导致各种功能停止工作。我发现我的主视图控制器的原始实例仍在内存中,可以访问。
我相信这个问题可能与线程和 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 再次运行。任何帮助将不胜感激,谢谢!
【问题讨论】: