【问题标题】:Custom NSURLProtocol to show/hide NetworkActivityIndicator自定义 NSURLProtocol 以显示/隐藏 NetworkActivityIndi​​cator
【发布时间】:2015-02-09 22:14:10
【问题描述】:

我正在使用 Alamofire。跟进 Mattt 在 GitHub 上 closed issues 之一中的评论,我尝试了基于 NSURLProtocol 的机制来设置 UIApplication.sharedApplication().networkActivityIndicatorVisible 标志。

但是,在使用 Alamofire 的底层 NSURLSessionConfiguration 注册我的自定义协议后,我很快就卡住了,因为 Alamofire 并没有公开它的大部分 SessionDelegate 类。

有没有一种简单的方法来通知自定义NSURLProtocol 请求已完成,而无需在我的NSURLProtocol 中复制大部分现有的 Alamofire 实现?

【问题讨论】:

    标签: objective-c swift alamofire


    【解决方案1】:

    另一种方法(不实现 NSURLProtocol 方式)是创建一个 API,该 API 具有 executeRequest 方法:

    func executeRequest(method: Alamofire.Method, url: NSURL, parameters: [String: String]?, headers: [String : String]?) {
            // Show activity indicator on status bar
            UIApplication.sharedApplication().networkActivityIndicatorVisible = true
    
            let request = manager.request(method, url, parameters: parameters, encoding: .JSON, headers: headers)
                .responseJSON {
                    response in
                    ...
    
                    // Hide activity indicator on status bar
                    UIApplication.sharedApplication().networkActivityIndicatorVisible = false
            }
        }
    

    当然,您的所有请求都必须使用新创建的 API 执行。

    【讨论】:

    • 但是一旦你有两个并发请求就会中断,对吧?
    • 确实如此。有两个请求,如果其中一个较早完成,则活动指示器将在第二个请求完成之前隐藏。但这很容易解决。您可以保留活动请求的计数,只有当活动请求计数为 0 时才隐藏活动指示器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多