使用AFNetworking无法获得成功/失败的共享扩展回调

时间:2016-02-25 06:11:42

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

我在共享扩展程序中遇到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请求在服务器端完成;完成永远不会被调用。

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

1)尝试在Postman中执行此请求,以检查正确的方式和参数,如果确定 - >> 2。

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

NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];

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

在这一点上,我们可以假设你的单音被初始化为另一个具有不同配置的请求。

3)similar problem

4)about AFNetworking background

P.S。尝试在主线程上使用简单异步,在等待响应时使用微调器

答案 2 :(得分:1)

我尝试过的一些事情:

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

希望其中一些可以让您更接近于导致问题的原因。