我正在構建一個共享擴展,需要下載一些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 =失去連接到後臺傳輸服務}
我猜我的擴展正在獲取與「丟失的連接到後臺傳輸服務」錯誤的回調,因爲背景傳輸服務因拋出異常而崩潰。
在開發論壇上也問過這個問題,併爲它開了一個雷達。 https://devforums.apple.com/message/1031240#1031240 – 2014-08-28 17:54:28
當構建一個基本的示例應用程序時,我得到了相同的結果。 – 2014-08-28 17:54:50
還有更多的事情,當我使用GET請求而不是POST時,我得到了相同的結果(請求永遠不會發送)。蘋果說你可以使用POST請求下載任務。 – 2014-08-28 18:56:03