Xamarin.ios iOS8:backgroundSessionConfiguration已弃用

Xamarin.ios iOS8:backgroundSessionConfiguration已弃用,xamarin.ios,xamarin,ios8,deprecated,nsurlsession,Xamarin.ios,Xamarin,Ios8,Deprecated,Nsurlsession,在iOS8发布之前,我下载了ios8sdk来观察我的应用程序将如何工作。有时我的应用程序需要从服务器下载数据,我使用NSUrlSession。现在,当应用程序准备下载会话时,会出现下一个警告: +backgroundSessionConfiguration:已弃用。请改用带标识符的+BackgroundSessionConfiguration: 之后,我的应用程序崩溃,出现下一个异常: Unable to cast object of type 'MonoTouch.Foundation.NSU

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

+backgroundSessionConfiguration:已弃用。请改用带标识符的+BackgroundSessionConfiguration:

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

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());
谢谢你的帮助

这应该行得通

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

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

NSURLSessionConfiguration *sessionConfig;

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

很可能,您使用iOS 8重新编译,因此应该使用新方法。因此,你也应该下载最新的alpha版本。因此,我将Xamarin.iOS更新为7.9.3.52版,但仍然无法运行。NSUrlSessionConfiguration中没有像“BackgroundSessionConfiguration WithIdentifier”和方法“BackgroundSessionConfiguration”这样的方法仍然在导出属性“BackgroundSessionConfiguration:”参数中使用。我在iOS 7上也面临这个问题。。从未更新到iOS 8,因此这可能是一个普遍问题。是的,这是正确的答案,但前提是您将Xamarin iOS更新到高于8.0.0.55的版本。这是一个更复杂的bug,在我与Xamarin支持人员沟通后,他们修复了它。