2016-01-24 155 views
1

我想使用共享扩展从主机应用程序共享文本和URL。iOS共享扩展:如何从主机应用程序共享URL和文本

- (BOOL)isContentValid { 


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 *url, NSError *error) { 
       if(url ) { 

         self.linksURL= [url absoluteString]; 

       } 
      }]; 
     } 
     else if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypeText ]) 
     { 
      [itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeText options:nil completionHandler:^(NSURL *url, NSError *error) { 
       if(url ) { 
         self.linkTitleText= [url absoluteString]; 

       } 
      }]; 


     } 
    } 

} 





[email protected]; 
return YES; 

}

回答

0

这其中大部分是正确的,但该方法的实现是错误的,因为任何事情发生之前,你将返回TRUE。相反,做这种方式的话,建议用一个方法,象这样完成处理...

-(void)contentURL:(NSExtensionItem *)extension completion:(void (^)(NSURL *url))completion { 
    for (NSItemProvider *items in self.shareItem.attachments) { 
     if ([items hasItemConformingToTypeIdentifier:(NSString *)kUTTypeURL]) { 
      [items loadItemForTypeIdentifier:(NSString *)kUTTypeURL options:nil completionHandler:^(NSURL *url, NSError *error) { 
       [[NSOperationQueue mainQueue] addOperationWithBlock:^{ 
        completion(url); 

       }]; 

      }]; 

     } 

    } 

} 

然后创建文本属性类似的方法。

P.S别忘了把操作放在一个块中