在iOS的共享扩展中为Safari获取URL在SLComposeServiceViewController中

问题描述:

此问题可能以前以不同的形式提出过,但我试图稍微深入地了解共享扩展,因此此问题比以前问这个问题的版本。在iOS的共享扩展中为Safari获取URL在SLComposeServiceViewController中

当编写一个共享扩展,我们可以根据苹果的文档继承SLComposeServiceViewController并获得viewDidLoad中()和didSelectPost()等事件,但在VC的属性只有contentText和TextView的和占位性

https://developer.apple.com/library/prerelease/ios/documentation/Social/Reference/SLComposeServiceViewController_Class/

鉴于这种情况,什么是执行以下操作的最佳方式:

首先,填充,随着网站的URL显示在VC

其次,访问URL传递给sharedDefaults如下

let shareDefaults = NSUserDefaults(suiteName: "groupName") 
shareDefaults?.setObject(self.contentText, forKey: "stringKey") 
shareDefaults?.synchronize() 

,以便能够保存它从应用程序稍后访问。

任何有关获取URL的帮助将不胜感激。

您可以访问这样的网址:

- (void)didSelectPost { 
    NSExtensionItem *item = self.extensionContext.inputItems.firstObject; 
    NSItemProvider *itemProvider = item.attachments.firstObject; 
    if ([itemProvider hasItemConformingToTypeIdentifier:@"public.url"]) { 
     [itemProvider loadItemForTypeIdentifier:@"public.url" 
             options:nil 
           completionHandler:^(NSURL *url, NSError *error) { 
            // Do what you want to do with url 
            [self.extensionContext completeRequestReturningItems:@[]   
                    completionHandler:nil]; 
           }]; 
    } 
} 

这里是斯威夫特一样的:

override func didSelectPost() { 
     if let item = extensionContext?.inputItems.first as? NSExtensionItem { 
      if let itemProvider = item.attachments?.first as? NSItemProvider { 
       if itemProvider.hasItemConformingToTypeIdentifier("public.url") { 
        itemProvider.loadItemForTypeIdentifier("public.url", options: nil, completionHandler: { (url, error) -> Void in 
         if let shareURL = url as? NSURL { 
          // do what you want to do with shareURL 
         } 
         self.extensionContext?.completeRequestReturningItems([], completionHandler:nil) 
        }) 
       } 
      } 
     } 
    } 
+3

“public.url”可以用'kUTTypeURL'更换所以你不使用硬编码的字符串。 ''kUTTypeURL作为字符串'和'在Swift中导入MobileCoreServices'。 – timgcarlson