从swift类

时间:2015-09-03 15:40:18

标签: ios swift class uinavigationcontroller

我有一个使用http调用来从外部存储流式传输视频的应用。 当用户的设备未连接到网络服务时,我需要该应用程序返回上一个控制器。

流程如下:用户访问元素列表(表格视图单元格),选择一个,然后应用程序进入播放器控制器。在此控制器上,调用流以传输文件。

我在控制器之外的类中使用api调用处理程序,我不知道如何从此处(元素列表)返回到前一个控制器。

连接问题错误都在api类中被捕获。 我没有显示任何代码,因为我不确定它是否相关。如果您需要查看任何内容,请告诉我,我会更新问题。应该怎么做? (当然我使用导航控制器)

由于

2 个答案:

答案 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
        }
    })
}