iOS 8 Share extension loadItemForTypeIdentifier:options:completionHandler: completion closure not executing

后端 未结 6 1827
一向
一向 2020-12-24 09:07

I\'m using the loadItemForTypeIdentifier:options:completionHandler: method on an NSItemProvider object to extract a url from Safari via a Share extension in iOS 8.

6条回答
  •  轮回少年
    2020-12-24 09:58

    Since completeRequestReturningItems must be called after all completionHandlers are called back, below is what I do.

     let group = dispatch_group_create()
    
        for item: AnyObject in self.extensionContext!.inputItems {
            let inputItem = item as! NSExtensionItem
            for provider: AnyObject in inputItem.attachments! {
                let itemProvider = provider as! NSItemProvider
                if itemProvider.hasItemConformingToTypeIdentifier("public.url") {
                    dispatch_group_enter(group)
                    itemProvider.loadItemForTypeIdentifier("public.url", options: nil, completionHandler: {
                        (result: NSSecureCoding!, error: NSError!) -> Void in
                        //...
                        dispatch_group_leave(group)
                    });
                }
                if itemProvider.hasItemConformingToTypeIdentifier(kUTTypeImage as String) {
                    dispatch_group_enter(group)
                    itemProvider.loadItemForTypeIdentifier(kUTTypeImage as String, options: nil, completionHandler: { (result, error) -> Void in
                        if let resultURL = result as? NSURL {
                            if let image = UIImage(data: NSData(contentsOfURL: resultURL)!) {
                                // ...
                            }
                        }
                        dispatch_group_leave(group)
                    });
                }
            }
        }
        dispatch_group_notify(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), {
            self.extensionContext!.completeRequestReturningItems([], completionHandler: nil)
        })
    

提交回复
热议问题