【问题标题】:iOS8: backgroundSessionConfiguration is deprecatediOS8:不推荐使用 backgroundSessionConfiguration
【发布时间】:2015-01-08 18:09:39
【问题描述】:

在 iOS8 发布之前,我下载了 iOS8 SDK 来观察我的应用程序将如何工作。有时我的应用程序需要从服务器下载数据,我为此使用 NSUrlSession。现在,当应用程序准备下载会话时,会出现下一个警告:

+backgroundSessionConfiguration: is deprecated. Please use +backgroundSessionConfigurationWithIdentifier: instead

之后我的应用程序崩溃并出现下一个异常:

Unable to cast object of type 'MonoTouch.Foundation.NSUrlSessionTask' (Objective-C type: '__NSCFBackgroundDownloadTask') to type 'MonoTouch.Foundation.NSUrlSessionDownloadTask'.
Additional information:
    Selector: URLSession:downloadTask:didFinishDownloadingToURL:
    Method: Microsoft.Synchronization.ClientServices.NSUrlDownloadDelegate:DidFinishDownloading (MonoTouch.Foundation.NSUrlSession,MonoTouch.Foundation.NSUrlSessionDownloadTask,MonoTouch.Foundation.NSUrl)

创建 NSUrlSession 的代码:

NSUrlSessionConfiguration sessionConfiguration = NSUrlSessionConfiguration.BackgroundSessionConfiguration(urlSessioinId);
NSUrlDownloadDelegate downloadDelegate = new NSUrlDownloadDelegate();
NSUrlSession downloadSession = NSUrlSession.FromConfiguration(sessionConfiguration, downloadDelegate, new NSOperationQueue());

感谢您的帮助!

【问题讨论】:

  • 很有可能,您使用 iOS 8 重新编译,因此您应该使用新方法。因此,您也应该为此下载最新的 Alpha 版。
  • 所以,我将 Xamarin.iOS 更新到版本 7.9.3.52,但仍然无法正常工作。 NSUrlSessionConfiguration 中没有像“BackgroundSessionConfigurationWithIdentifier”这样的方法,方法“BackgroundSessionConfiguration”仍在导出属性“backgroundSessionConfiguration:”参数中使用。
  • 我在 iOS 7 上也遇到了这个问题。从未更新到 iOS 8,所以这可能是一个普遍问题。

标签: xamarin.ios xamarin ios8 deprecated nsurlsession


【解决方案1】:

我使用以下方法来解决 Objective-C 中的这个错误:

NSURLSessionConfiguration *sessionConfig;

if ([[[UIDevice currentDevice] systemVersion] floatValue] >=8.0f)
{
    sessionConfig =[NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"downloads"];
}
else
{
    sessionConfig = [NSURLSessionConfiguration backgroundSessionConfiguration:@"downloads"];
}

【讨论】:

    【解决方案2】:

    这应该可行。

    if(UIDevice.CurrentDevice.CheckSystemVersion(8, 0))
    {
     configDownload = NSUrlSessionConfiguration.CreateBackgroundSessionConfiguration(sessionId);
    }
    else
    {
    configDownload = NSUrlSessionConfiguration.BackgroundSessionConfiguration(sessionId);
    }
    

    【讨论】:

    • 是的,这是正确的答案,但前提是您将 Xamarin iOS 更新到高于 8.0.0.55 的版本。这是一个更复杂的错误,在我与 Xamarin 支持人员沟通后,他们修复了它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 2012-11-14
    相关资源
    最近更新 更多