我有一个使用http调用来从外部存储流式传输视频的应用。 当用户的设备未连接到网络服务时,我需要该应用程序返回上一个控制器。
流程如下:用户访问元素列表(表格视图单元格),选择一个,然后应用程序进入播放器控制器。在此控制器上,调用流以传输文件。
我在控制器之外的类中使用api调用处理程序,我不知道如何从此处(元素列表)返回到前一个控制器。
连接问题错误都在api类中被捕获。 我没有显示任何代码,因为我不确定它是否相关。如果您需要查看任何内容,请告诉我,我会更新问题。应该怎么做? (当然我使用导航控制器)
由于
答案 0 :(得分:2)
如果您想返回上一个视图控制器,您应该使用:
override func viewDidLoad()
{
...
NSNotificationCenter.defaultCenter().addObserver(
self,
selector: "goBack:",
name: "goBackNotification",
object: nil)
...
}
func goBack(notification: NSNotification)
{
navigationController?.popViewControllerAnimated(true)
}
如果您不需要在视图控制器中使用此功能,但在另一个类中,您可以使用 NSNotificationCenter 在显示前一个控制器时通知视图控制器,就像这样:
<强> YourViewController 强>
NSNotificationCenter.defaultCenter().postNotificationName("goBackNotification", object: nil)
<强> AnotherClass 强>
deinit
{
NSNotificationCenter.defaultCenter().removeObserver(self)
}
请勿忘记删除 YourViewController 中的观察者:
{{1}}
编辑1:您可以使用委托而不是NSNotification方法。如果您不了解NSNotification与委托之间的差异,我建议您this answer。
答案 1 :(得分:0)
除NSNotificationCenter之外的一种常见方法是利用闭包或委托来通知您的ViewController流式传输尝试失败。使用闭包,负责流式传输的类的API可以扩展为将完成闭包作为参数,如果有的话,用NSError调用它,如果没有,则调用nil。
func streamFile(completion: NSError? -> Void) {
// Try to start the streaming and call the closure with an error or nil
completion(errorOrNil)
}
当调用ViewController中的API时,您可以将闭包传递给方法并检查错误。如果出现问题,应该出现错误并且应该关闭ViewController
func startStream() {
StreamingAPIClient.streamFile(completion: { [weak self] error in
if error != nil {
// Handle error
self.dismissViewControllerAnimated(true, completion: nil)
} else {
// Proceed with the streaming
}
})
}