2015-04-06 86 views
2

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

//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 
      } 

    }) 

另外,如何使当所选附件包含一个以上的文件(照片或视频),或者是一个无效的文件类型扩展名按钮消失。任何答复表示赞赏。提前致谢。

+0

对于这个扩展,'NSExtensionActivationRule'看起来像什么? –

回答

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) 

希望这有助于!

+0

啊,我相信这是为了在应用内共享。我需要的是这样一种方式,当您按照照片或图片库或Safari中的文件共享时,它会引用该文件并将其转换为NSData。无论如何,这对未来我将制作的游戏会有所帮助。 –