【问题标题】:Not Getting Success/Fail Callbacks for Share Extension using AFNetworking使用 AFNetworking 未获得共享扩展的成功/失败回调
【发布时间】:2016-02-25 06:11:42
【问题描述】:

我在共享扩展中遇到了 AFNetworking 的一些问题。在didSelectPost,我打电话给:

[[AuthClient sharedClient] POST: @"/v1/events"
    parameters: params success: ^ (AFHTTPRequestOperation * operation, id responseObject) {
        [self.extensionContext completeRequestReturningItems: nil completionHandler: nil];
    }
    failure: ^ (AFHTTPRequestOperation * operation, NSError * error) {
        NSLog(@"error: %@", error);
        [self.extensionContext cancelRequestWithError: error];
    }
];

[AuthClient sharedClient] 使用单例模式获取AFHTTPSessionManager 的实例,其中NSURLSessionConfiguration 设置了背景标识符。

但是,成功或失败回调都不会被调用,它只是无限期地挂起,直到扩展被杀死。有趣的是,HTTP 请求在服务器端完成得很好;完成只是永远不会被调用。

【问题讨论】:

  • 为什么不尝试新的 AFN 课程?
  • 你能在调试器中停下来看看你所有的堆栈吗?看看他们中的 2 个是否试图使用同一个锁。 (或其他人的锁)

标签: ios afnetworking afnetworking-2 ios8-share-extension


【解决方案1】:

我想,问题不在于AFNetworking,而在于那个单例类。您尚未指定应用程序的架构,但我假设您可以同时使用相同的 [AuthClient sharedClient] 单例在不同的视图控制器中调用多个 API。因此,您实际上收到了一个success 呼叫,但不是针对上述呼叫,而是在您的控制器中的其他地方。我在基于UITabbarController 的应用程序中遇到了确切的问题,我在不同视图控制器的viewDidLoad 中进行API 调用,并且我的测试人员不断更改所有选项卡。因此,我尝试获取第一个视图控制器(第一个选项卡)的响应,并用于在第二个视图控制器(第二个选项卡)中获取响应,这是错误的!

【讨论】:

  • 同意...也许在成功块中粘贴 NSLog() 行以验证它们没有被调用。由于您在单例上使用实例变量,因此只能有 1 个扩展上下文,因此如果另一个调用被触发时调用可能正在进行中;那么只有一件事会收到回调。
  • 记录没有帮助,但问题出在单例上。不会涉及特定于应用程序的详细信息,但这让我走上了正轨
【解决方案2】:

1)尝试在Postman中执行这个请求,检查正确的方式和参数,如果ok -> 2.

2) 尝试像这样使用会话配置

NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];

// Initialize Session Manager
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:sessionConfiguration];

此时我们可以假设您的单音已针对具有不同配置的另一个请求进行了初始化。

3)similar problem

4) about AFNetworking background

附:尝试在主线程上使用简单的异步,在等待响应时使用微调器

【讨论】:

    【解决方案3】:

    我会尝试一些事情:

    • 使用网络跟踪进行健全性检查;并确保您的数据 期望到达客户。
    • 设置断点并查找任何 阻塞的线程或异常(甚至考虑破坏 Apple 网络 API 本身,即 CFNetworking 或 NSURLSession 等)。
    • 检查 lambda/completion 是否阻塞 您的单例对象正在正确设置/保留/尝试编写一个简单的测试例程而不使用单例来查看它是否有所作为(例如通过手动实例化类并使用它)。
    • 从 sn-p 中不清楚“成功”完成处理程序是否打印出调试消息 - 如果还没有在处理程序中,请考虑在那里添加一个 NSLog。

    希望其中的一些内容可以让您更了解导致问题的原因。

    【讨论】:

      猜你喜欢
      • 2015-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多