2014-08-28 45 views
2

我正在構建一個共享擴展,需要下載一些JSON作爲響應。我完全不知道爲什麼這不起作用,我試着按摩它的許多小部分,但仍然沒有。在模擬器上,這工作正常。無法使用實際設備上的共享擴展使用NSURLSession

下面是我得到了什麼:

- (void)didSelectPost 
{ 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 

    // ... set up the request 

    NSString *const kFLHTTPMethodPOST = @"POST"; 
    [request setHTTPMethod:kFLHTTPMethodPOST]; 

    NSString *sessionConfigurationIdentifier = [[NSBundle mainBundle] bundleIdentifier]; 

    self.sessionConfiguration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:sessionConfigurationIdentifier]; 
    // The sharedContainerIdentifier must be populated for background sessions 
    // https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple_ref/doc/uid/TP40014214-CH21-SW1 
    // http://cl.ly/image/0Y3P1B450U1Y 
    self.sessionConfiguration.sharedContainerIdentifier = kFLAppGroupIdentifier; 
    // The delegate must be populated for background sessions 
    // https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/URLLoadingSystem/Articles/UsingNSURLSession.html#//apple_ref/doc/uid/TP40013509-SW44 
    // http://cl.ly/image/431J0G2r2p0X 
    self.session = [NSURLSession sessionWithConfiguration:self.sessionConfiguration delegate:self delegateQueue:nil]; 

    // Generate our task and start it 

    // Use of a download task is required for extensions even though a data task might be more apt here 
    // https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/URLLoadingSystem/Articles/UsingNSURLSession.html#//apple_ref/doc/uid/TP40013509-SW44 
    self.task = [self.session downloadTaskWithRequest:request]; 
    [self.task resume]; 

    // Finish the extension 

    [self.extensionContext completeRequestReturningItems:nil completionHandler:nil]; 
} 

這不是從示例代碼在https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple_ref/doc/uid/TP40014214-CH21-SW2和很多我在其他地方看到的代碼非常不同。主應用程序和擴展程序都具有我所知的適當權利和配置。看起來應用程序組正在工作,因爲擴展能夠存儲文件並從與主應用程序共享的NSUserDefaults副本中提取值。

有沒有人能得到這個工作正常?好像我必須錯過一些東西。

UPDATE:

被挖掘到這進一步。

我看到這個記錄的分機結束後。

Aug 28 12:03:41 Tim-Johnsens-iPod nsurlsessiond [98]:無法在file:/// private/var/mobile/Containers/Shared/AppGroup/4C86E3B4-6795-4D8A- 9C47-11B88A252703 /圖書館/緩存/ com.apple.nsurlsessiond /下載/ com.flipboard.flipboard-IPAD調試/,錯誤:錯誤域= NSCocoaErrorDomain代碼= 513「的操作無法完成(可可錯誤513。 )」的UserInfo = 0x14ea3460 {NSFilePath = /私有的/ var /移動/容器/共享/ AppGroup/4C86E3B4-6795-4D8A-9C47-11B88A252703 /庫/緩存/ com.apple.nsurlsessiond /下載/ com.flipboard.flipboard-ipad的-debug,NSUnderlyingError = 0x14e7f320「無法完成操作,不允許操作」}

奇怪的是我已經將文件存儲在file:/// private/var/mobile/Containers/Sh ared/AppGroup/4C86E3B4-6795-4D8A-9C47-11B88A252703 /成功,出於某種原因NSURLSession似乎無法將文件放在那裏。

我添加了一行手動創建在我的分機的-viewDidLoad這個目錄和錯誤而停止,但現在我得到不同的錯誤。它看起來像是一個臨時文件正在創建,但在iOS創建一個無效的URL的地方,然後我的-URLSession:任務:didCompleteWithError:在會話連續兩次調用。 (注:以「~~」開頭的行是我加的)。 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0創建臨時文件:/ private/var/mobile/Containers/Shared/AppGroup/4C86E3B4-6795-4D8A-9C47- 11B88A252703 /庫/緩存/ com.apple.nsurlsessiond /下載/ com.flipboard.flipboard-ipad的調試/ CFNetworkDownload_BUqFkv.tmp 08月28 13點33分34秒TIM-Johnsens-的iPod nsurlsessiond [98]:從PID 502連接:警告:在調用收到的消息期間捕獲異常,丟棄傳入的消息並使連接無效。 例外:* - [NSURL initFileURLWithPath:]:零字符串參數 Aug 28 13:33:34 Tim-Johnsens-iPod ShareExtension [502]:~~ - [FLShareExtensionViewController URLSession:task:didCompleteWithError:] - Error Domain = NSURLErrorDomain Code = -1「未知錯誤」UserInfo = 0x176d19d0 {NSErrorFailingURLKey = [已編輯],NSErrorFailingURLStringKey = [已編輯],NSLocalizedDescription =未知錯誤} Aug 28 13:33:34 Tim-Johnsens-iPod ShareExtension [502]:~~ - [FLShareExtensionViewController URLSession:任務:didCompleteWithError:] - 錯誤域= NSURLErrorDomain代碼= -997 「丟失連接到後臺傳輸服務」 的UserInfo = 0x1765fb80 {NSErrorFailingURLKey = [刪除],NSErrorFailingURLStringKey = [刪除],NSLocalizedDescription =失去連接到後臺傳輸服務}

我猜我的擴展正在獲取與「丟失的連接到後臺傳輸服務」錯誤的回調,因爲背景傳輸服務因拋出異常而崩潰。

+0

在開發論壇上也問過這個問題,併爲它開了一個雷達。 https://devforums.apple.com/message/1031240#1031240 – 2014-08-28 17:54:28

+0

當構建一個基本的示例應用程序時,我得到了相同的結果。 – 2014-08-28 17:54:50

+0

還有更多的事情,當我使用GET請求而不是POST時,我得到了相同的結果(請求永遠不會發送)。蘋果說你可以使用POST請求下載任務。 – 2014-08-28 18:56:03

回答

0

原來,這在iOS 8 GM中已修復,它只是beta版本中的一個bug。