iOS共享扩展:如何从主机应用程序一起共享URL和文本

时间:2016-01-24 00:01:54

标签: ios ios9 ios-extensions

我想使用共享扩展程序从主机应用程序共享文本和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];

                }
            }];


        }
    }

}





self.charactersRemaining=@85;
return YES;

}

1 个答案:

答案 0 :(得分: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不要忘记将操作放在一个区块中