在主机应用程序和今天的扩展程序之间共享用户生成的图像的最佳方式是啥

Posted

技术标签:

【中文标题】在主机应用程序和今天的扩展程序之间共享用户生成的图像的最佳方式是啥【英文标题】:What is the best way to share user generated images between host app and today extension在主机应用程序和今天的扩展程序之间共享用户生成的图像的最佳方式是什么 【发布时间】:2017-01-21 05:10:17 【问题描述】:

我知道在主应用程序和小部件之间共享数据是使用 NSUserDefaults 或 CoreData,但不推荐使用这两种方式来共享图像。要存储用户生成的图像,应用应使用应用的 Documents 目录,但无法从小部件访问,那么应用应如何与其小部件共享图像?

【问题讨论】:

尝试检查应用组功能。 @karthikeyan,可行,但不推荐存储图像的方式,那么正确的方法是什么? 无论如何你需要将图像转换为数据,如果你使用 db.same 在这里转换它并使用应用程序组。为什么不推荐这种方式? 是的,这就是我所做的,将图像转换为要存储的数据,我只想让用户设置小部件背景图像,所以我不使用 db。我应该采用相同的方法吗? 您是否在小部件中获得了图像数据?如果您打算多张图片,请不要按照这种方式遇到问题***.com/questions/27917538/… 【参考方案1】:

我使用共享应用程序组目录来保存图像并从容器应用程序和扩展程序访问它,这是代码。

保存图片

 public func saveImage(image:UIImage)        
    let fileManager = FileManager.default
    let directory = fileManager.containerURL(forSecurityApplicationGroupIdentifier: "yourappgroup")?.appendingPathComponent("yourImagename.jpg")
    let imageData = UIImageJPEGRepresentation(image, 1)
    fileManager.createFile(atPath: (directory?.path)!, contents: imageData, attributes: nil)

获取保存的图片

public func saveImage() -> UIImage 
let fileManager = FileManager.default
    if let imagePath = fileManager.containerURL(forSecurityApplicationGroupIdentifier: "yourappgroup")?.appendingPathComponent("yourImagename.jpg").path             
        if fileManager.fileExists(atPath: imagePath)                
            return UIImage(contentsOfFile: imagePath)
        else
            print("No Image")                
            return nil
        
    

【讨论】:

以上是关于在主机应用程序和今天的扩展程序之间共享用户生成的图像的最佳方式是啥的主要内容,如果未能解决你的问题,请参考以下文章

iOS swift 使用 alamofire 在应用程序和共享扩展程序之间共享 cookie

如何在主 iOS 应用程序及其共享扩展程序之间使用相同的经过身份验证的用户令牌

与应用程序和扩展程序共享时,UserDefaults 数据存储在哪里?

在沙盒 OSX 应用程序和扩展程序之间共享 NSUserDefault

在 iOS 应用程序及其扩展程序之间共享 Storyboard

在包含应用程序和扩展程序之间共享领域