在主机应用程序和今天的扩展程序之间共享用户生成的图像的最佳方式是什么
What is the best way to share user generated images between host app and today extension
我知道在主应用程序和小部件之间共享数据是使用 NSUserDefaults 或 CoreData,但这两种共享图像的方式都不推荐。要存储 用户生成的图像,应用程序应使用应用程序的文档目录,但无法从小部件访问它,那么应用程序应如何与其小部件共享图像?
我使用共享应用程序组目录来保存图像并从容器应用程序和扩展程序访问它,这是代码。
保存图片
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
}
}
我知道在主应用程序和小部件之间共享数据是使用 NSUserDefaults 或 CoreData,但这两种共享图像的方式都不推荐。要存储 用户生成的图像,应用程序应使用应用程序的文档目录,但无法从小部件访问它,那么应用程序应如何与其小部件共享图像?
我使用共享应用程序组目录来保存图像并从容器应用程序和扩展程序访问它,这是代码。
保存图片
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
}
}