共享扩展loadItemForTypeIdentifier返回NSURL的错误

str*_*mes 8 objective-c ios ios8-share-extension

我有以下代码来读取传递的URL.我正在使用Pocket应用程序进行测试,虽然hasItemConformingToTypeIdentifier返回YES kUTTypeURL,尝试加载它返回错误而不是说明

"意外的价值等级."

.如果我尝试将其作为id<NSSecureCoding>项目和调试加载,我发现传入的对象确实只是页面的标题而不是URL.我如何阅读URL?

  NSURL *pageURL = nil;
  for (NSExtensionItem *item in self.extensionContext.inputItems) {
    for (NSItemProvider *itemProvider in item.attachments) {
     if ([itemProvider hasItemConformingToTypeIdentifier: (NSString*) kUTTypeURL]) {
        [itemProvider loadItemForTypeIdentifier:(NSString*) kUTTypeURL options:nil completionHandler:^(id <NSSecureCoding> urlItem, NSError *error) {
          if ([((NSObject*)urlItem) isKindOfClass: [NSURL class]]) {
              pageURL = [((NSURL*)urlItem) absoluteString];
          }
        }];
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

Mr.*_*ers 0

尝试这个

  __block NSURL *pageURL = nil;
  for (NSExtensionItem *item in self.extensionContext.inputItems) {
    for (NSItemProvider *itemProvider in item.attachments) {
     if ([itemProvider hasItemConformingToTypeIdentifier: (NSString*) kUTTypeURL]) {
        [itemProvider loadItemForTypeIdentifier:(NSString*) kUTTypeURL options:nil completionHandler:^(NSURL *urlItem, NSError *error) {
          if (urlItem) {
              pageURL = urlItem;
          }
        }];
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

现在,如果您想获取当前网站的 URL,请使用
NSString *output = [pageURL absolutestring];

输出 - 将是您的 URL。