iOS 8 分享扩展附件 - Xcode - Swift

3

我已经为我的iOS应用程序添加了共享扩展,并使用UIViewController创建了自定义UI,而不是默认的SLComposeServiceViewController。UI正在工作,但是如何引用选择要共享的文件?例如,如果我分享一张照片,如何引用该照片并将其转换为NSData。我目前有这段代码,但是当它运行时,数据似乎从未被初始化。我做错了什么?

    //Runs when button is pressed
    inputItem = extensionContext!.inputItems.first as NSExtensionItem
    attachment = inputItem.attachments![0] as NSItemProvider
    attachment.loadItemForTypeIdentifier(kUTTypeJPEG as String,
        options: nil,
        completionHandler: {(content, error: NSError!) in
            let url = content as? NSURL
            if let data = NSKeyedArchiver.archivedDataWithRootObject(url!) as NSData?{
                self.imageChosen = UIImage(data: data)!
                //Never runs
            }
            else {
                //Always runs
            }

    })

此外,当所选的附件包含多个文件(照片或视频),或者是无效文件类型时,如何使扩展按钮消失?感激任何答案。提前感谢。

这个扩展的NSExtensionActivationRule是什么样子? - Tom Harrington
1个回答

0

这是我喜欢分享图片和文件的方式:

//when the share button is pressed, default share phrase is added, cropped image of highscore is added

    var sharingItems = [AnyObject]()

    var shareButtonHighscore = NSUserDefaults.standardUserDefaults().objectForKey("highscore") as Int!

    sharingItems.append("I am sharing \(shareButtonHighscore)!")

    UIGraphicsBeginImageContextWithOptions(UIScreen.mainScreen().bounds.size, false, 0);
    self.view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)
    var image:UIImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    sharingItems.append(image)

    let activityViewController = UIActivityViewController(activityItems: sharingItems, applicationActivities: nil)

    activityViewController.excludedActivityTypes = [UIActivityTypeCopyToPasteboard,UIActivityTypeAirDrop,UIActivityTypeAddToReadingList,UIActivityTypeAssignToContact,UIActivityTypePostToTencentWeibo,UIActivityTypePostToVimeo,UIActivityTypePrint,UIActivityTypeSaveToCameraRoll,UIActivityTypePostToWeibo]

    self.presentViewController(activityViewController, animated: true, completion: nil)

希望这能帮到你!


啊,这是用于应用内共享的,我想。我需要的是一种方法,使得当你在照片库或Safari中按下共享按钮时,它可以引用文件并将其转换为NSData。无论如何,谢谢了,这对我未来开发的游戏可能会有所帮助。 - Arvin Zadeh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接