【问题标题】:Action Extension - Multiple NSURLSession动作扩展 - 多个 NSURLSession
【发布时间】:2014-12-05 12:42:31
【问题描述】:

我正在尝试通过操作扩展从照片应用上传图片。我使用 NSURLSession 在后台上传它。这是我使用的代码。

var configName = "com.myapp.uploadImage"
var config  = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier(configName)
config.sharedContainerIdentifier = "group.myApp.sample"

var session = NSURLSession(configuration: config)
let task = session.dataTaskWithRequest(request)
task.resume()

self.extensionContext!.completeRequestReturningItems(self.extensionContext!.inputItems, completionHandler: nil)

效果很好。

问题是当我上传图像并关闭视图一次然后再次尝试上传第二张图像时,初始进程仍在后台运行,初始 NSURLSession 未完成。只有第二个过程完成。简而言之,第二届会议胜过第一届会议。

我尝试使用 NSOperationQueue。但是操作扩展一旦被解除并为第二个会话再次打开,它只会创建一个新的 NSOperationQueue,因此问题仍然存在。

任何建议都会有所帮助。提前致谢。

【问题讨论】:

    标签: ios swift ios8-extension ios8-share-extension


    【解决方案1】:

    确保在第一个仍在运行时,不要尝试使用相同的标识符实例化第二个后台会话。保存您的后台会话,以便以后使用。

    正如URL Loading System Programming Guide: Using NSURLSession 的“后台会话注意事项”所说:

    注意:您必须为每个标识符创建一个会话(在创建配置对象时指定)。多个会话共享同一个标识符的行为是不确定的。

    请注意,该文档还提到“必须”指定和实现委托。 (如果不出意外,如果不这样做,您怎么知道失败?)App Extension Programming Guide执行上传和下载 部分中提供的示例也指定了委托。 p>

    另外,您的主应用的应用委托是否实现了handleEventsForBackgroundURLSession 方法?您必须捕获completionHandler 并在调用NSURLSessionDelegate 方法URLSessionDidFinishEventsForBackgroundURLSession 时调用它。

    最后,我注意到您正在使用数据任务。 NSURLSession 文档明确指出不应将数据任务与后台会话一起使用,而应仅使用上传/下载任务。我一直认为这只是为了让您不要尝试使用 didReceiveData 委托方法,但我可能会尝试使用上传任务,以防万一与后台会话的数据任务相关联的其他问题。

    【讨论】:

    • 我尝试过使用不同的标识符。还是同样的问题。
    • 另外,委托方法也无济于事。正如 Apple 指南所说,我们必须关闭操作扩展并在后台运行 nsurlsession。因此,随着操作扩展被解除,委托也被杀死。
    • 我已经在应用程序中执行了很长时间的 nsurlsessions。而且每次都运行良好。但是动作扩展有一个指导方针,听起来很合理。
    • App Extension Programming Guide 中的示例指定了一个委托,所以我也倾向于这样做。如果没有别的(a)它说它是后台会话所必需的; (b) 存在您自己没有使用的错误报告机制。同样的指南说,如果您的扩展在请求完成时没有运行,它会在主应用程序中调用handleEventsForBackgroundURLSession,因此您的应用程序也需要处理这个问题(这当然需要委托)。
    猜你喜欢
    • 1970-01-01
    • 2016-02-21
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 2011-03-15
    • 2014-07-03
    相关资源
    最近更新 更多