【问题标题】:Error in AFNetworking following upgrade to Xcode 7升级到 Xcode 7 后 AFNetworking 出错
【发布时间】:2015-09-16 08:54:59
【问题描述】:

升级到 Xcode 7 (7A21B) 后,在 AFURLSessionManager.m 中构建我当前的项目时会引发 AFNetworking 错误。我已将 AFNetworking 链接为 Git 中的子模块,因此它会定期更新。

错误是

AFURLSessionManager.m:288:87:Null 传递给需要非 null 参数的被调用者

负责人:

        NSURLSessionDataTask *dataTask = [[NSURLSession sessionWithConfiguration:nil] dataTaskWithURL:nil];

显然 nil 参数需要替换为值或实例化 dataTask 对象的方法需要更改,但我对 AFNetworking 不够熟悉,无法自己进行更改。

这是整个方法:

+ (void)initialize {
    if ([NSURLSessionTask class]) {
        NSURLSessionDataTask *dataTask = [[NSURLSession sessionWithConfiguration:nil] dataTaskWithURL:nil];
        Class taskClass = [dataTask superclass];

        af_addMethod(taskClass, @selector(af_resume),  class_getInstanceMethod(self, @selector(af_resume)));
        af_addMethod(taskClass, @selector(af_suspend), class_getInstanceMethod(self, @selector(af_suspend)));
        af_swizzleSelector(taskClass, @selector(resume), @selector(af_resume));
        af_swizzleSelector(taskClass, @selector(suspend), @selector(af_suspend));

        [dataTask cancel];
    }
}

有什么办法可以消除这个错误吗?

【问题讨论】:

  • 这个问题应该对你有帮助:stackoverflow.com/questions/31088137/…
  • 您使用的是最新的 AFNetworking 版本吗? github.com/AFNetworking/AFNetworking/releases/tag/2.6.0
  • @iAshish 是的,我看到了。显然,我可以以不同的方式以某种方式实例化 dataTask 对象,但我正在寻找一种修改它的方法,而不会引入任何我不知道的副作用,因为我不熟悉 AFNetworking。
  • @QuentinHayot 请原谅我的无知,但这不是 Git 会自动下拉为子模块的版本吗?如果没有,我将如何升级它?
  • 你说得对,我错过了你提到的那部分,对不起。

标签: ios afnetworking xcode7


【解决方案1】:

树解决方案。使用共享会话:

NSURLSessionDataTask *dataTask = [[NSURLSession sharedSession] dataTaskWithURL:nil];

或决定配置。您会在后台发送文件还是仅在您的应用程序在前台时发送文件?将 nil 替换为任一

[NSURLSessionConfiguration defaultSessionConfiguration]

或与

[NSURLSessionConfiguration  backgroundSessionConfigurationWithIdentifier:@"My Identifier"]

或直接使用 NSURLSession 代替过时的第三方框架。

【讨论】:

  • 这里的问题是,为了返回一个NSURLSessionDataTask 对象,URL 是必需的,并且不能为零。返回NSURLSessionDataTask 的两个方法都是dataTaskWithRequest:dataTaskWithURL:,它们显然需要非空值。
  • 是的,但这是这个 3rd 方框架的问题。为什么你自己不使用 NSURLSessions?
  • 是的,我通常这样做,但我正在开发的项目非常大,之前有很多使用 AFNetworking 的代码。
【解决方案2】:

这是一个简单的错误。感谢 Quentin 强调 Git 中的子模块尚未更新。这样做纠正了错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    • 2016-01-09
    相关资源
    最近更新 更多