在iOS的共享扩展中为Safari获取URL在SLComposeServiceViewController中
问题描述:
此问题可能以前以不同的形式提出过,但我试图稍微深入地了解共享扩展,因此此问题比以前问这个问题的版本。在iOS的共享扩展中为Safari获取URL在SLComposeServiceViewController中
当编写一个共享扩展,我们可以根据苹果的文档继承SLComposeServiceViewController并获得viewDidLoad中()和didSelectPost()等事件,但在VC的属性只有contentText和TextView的和占位性
鉴于这种情况,什么是执行以下操作的最佳方式:
首先,填充,随着网站的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)
})
}
}
}
}
“public.url”可以用'kUTTypeURL'更换所以你不使用硬编码的字符串。 ''kUTTypeURL作为字符串'和'在Swift中导入MobileCoreServices'。 – timgcarlson