2016-01-24 186 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別忘了把操作放在一個塊中