【问题标题】:Provide notification of successful action after dismissing view in swift快速关闭视图后提供成功操作的通知
【发布时间】:2015-12-15 08:14:31
【问题描述】:

到目前为止,我已经能够使用我的 API 加载数据,如下所示:

let api = APIController(delegate: self) 
api.request("get_student_list")

func didRecieveAPIResults(originalRequest: String,apiResponse: APIResponse) {
    // do stuff with API response here
}

这对于用户打开视图、加载数据然后刷新视图的情况非常有用。 (例如,加载学生列表)

我现在想创建这样的东西:

在学生列表视图中单击学生 > 成绩列表打开 > 在成绩列表视图中单击成绩 > 成绩列表已关闭 > 给出成功/失败通知

最好将代理设置为学生视图,这样当我关闭成绩视图时,学生视图会收到didRecieveAPIResults 信号,还是有更好的处理方法?

如果这是相关的,在整个应用程序中显示成功通知的通用方式可能是有意义的 - 例如屏幕底部的蓝色框会短暂显示然后隐藏。不过,我不太确定该怎么做。

非常感谢!

【问题讨论】:

    标签: swift api notifications


    【解决方案1】:

    如果您想要一个可以发送到任何对象的通知,那么您需要查看NSNotificationCenter.defaultCenter(),尤其是addObserver 的侦听器对象和发送通知时的postNotificationName。如果它只是一个简单的成功失败请求,我只会让 api.request 调用返回一个 Bool 值,然后使用您的 api 的编码器将执行以下操作:

    let success = api.request....
    if(!success)
    {
      //Houston we have a problem
    }
    

    您还可以通过将其设置为 Int 值来更详细地说明它,并返回错误代码而不仅仅是 bool 值

    如何使用通知

    ...api 请求结束

    let userInfo = ["originalRequest":originalRequest,"response": apiResponse];
    NSNotificationCenter.defaultCenter().postNotificationName("API_SUCCESS",object:nil,userInfo:userInfo);
    

    然后在需要知道通知的任何类内部

    init....
    {
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "APISuccess:", name: "API_SUCCESS", object: nil);
    }
    func APISuccess(notification:NSNotification)
    {
        if let userInfo = notification.userInfo
        {
            didRecieveAPIResults(originalRequest: userInfo["originalRequest"] as! String ,apiResponse: userInfo["response"] as! APIResponse)
        }
    }
    

    【讨论】:

    • 谢谢,这看起来很有希望。我是否正确地说您会从成绩视图发送请求,等待响应,然后弹出视图? (大概用另一个 UIView 覆盖所有控件,以便用户不会单击两次)或者有没有办法将 AppDelegate (或其他东西)设置为 API 响应的委托,以便您可以立即弹出视图?
    • 它是如何工作的,是你发送一个通知,并且任何正在监听这个特定通知的对象都会收到它。收到后,您可以随心所欲地使用它。所以在你的情况下,在你的 API 调用结束时,你发布一个通知,然后我猜是视图?会收到通知。你可以调用 didRecieveAPIResults。让我更新我的答案给你看
    • 完美,谢谢!对于关注这个问题的其他人,我现在使用 App Delegate 作为我的 API 请求的委托,这意味着我可以在 App Delegate 正在侦听响应时立即弹出视图,然后可以使用 NSNotificationCenter 发布通知。然后,我的学生视图可以收听该通知并根据需要提供视觉反馈。
    • 只是想向人们指出,如果您希望在 appdelegate(或任何具有 api 委托对象的调用)之外接收通知,则此方法是。如果在 appdelegate(或任何调用有 api 委托对象)内部,您只需使用常规方式接收委托调用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-07
    • 2012-08-06
    • 1970-01-01
    • 2020-11-01
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    相关资源
    最近更新 更多