这个问题之前可能已经以不同的形式提出过,但我正在尝试稍微深入一点地理解共享扩展,因此,这个问题比之前提出的问题版本更详细.
在编写Share扩展时,我们可以继承SLComposeServiceViewController并获取viewDidLoad()和didSelectPost()事件等,但VC上的唯一属性是contentText和textView以及根据Apple文档的占位符属性
鉴于这种情况,执行以下操作的最佳方式是什么:
首先,使用网站的URL填充显示的VC
其次,访问URL以传递给sharedDefaults,如下所示
- let shareDefaults = NSUserDefaults(suiteName: "groupName")
- shareDefaults?.setObject(self.contentText,forKey: "stringKey")
- shareDefaults?.synchronize()
以便能够保存它以便以后从应用程序访问.
任何有关获取URL的帮助将不胜感激.
解决方法
您可以像这样访问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];
- }];
- }
- }
Swift中的情况也是如此:
- 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)
- })
- }
- }
- }
- }