Swift: 如何在主项目和消息扩展之间共享动态图像
Swift: How to share dynamic images between main project and messages extension
我正在尝试向我的应用添加贴纸扩展,以便用户可以在我的应用中创建贴纸,然后在消息中使用它们。但是,文件路径似乎不同,所以我不能只将图像保存到文件路径,然后将它们加载到消息扩展名中。
基本上,在应用程序及其扩展程序之间共享数据的最佳方式是什么?特别是对于 NSUserDefaults 来说太大的数据。
我找到了答案,将目标放在一个组中,您可以访问相同的 fileManager 路径
如果您想在主项目和应用程序扩展之间共享数据,则必须启用 AppGroups
。
可在此处找到启用它和共享数据的完整教程 (http://www.theappguruz.com/blog/ios8-app-groups)。
启用AppGroups
后,您可以像这样将创建的贴纸存储在共享容器中:
if let fileManager = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "")
{
let imageName = "imageName" // write your image name here
let imageLocationUrl = fileManager.appendingPathComponent(imageName)
// for saving image
if let data:Data = UIImagePNGRepresentation(image) {
do {
try data.write(to: imageLocationUrl)
}catch {
// couldn't write
}
}
}
获取图片,
if let fileManager = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "")
{
let imageName = "imageName" // write your image name here
let imageLocationUrl = fileManager.appendingPathComponent(imageName)
// for getting image
if let data:Data = Data(contentsOfFile: imageLocationUrl.path) {
let image = UIImage(data: data, scale: UIScreen.main.scale)
}
}
我正在尝试向我的应用添加贴纸扩展,以便用户可以在我的应用中创建贴纸,然后在消息中使用它们。但是,文件路径似乎不同,所以我不能只将图像保存到文件路径,然后将它们加载到消息扩展名中。 基本上,在应用程序及其扩展程序之间共享数据的最佳方式是什么?特别是对于 NSUserDefaults 来说太大的数据。
我找到了答案,将目标放在一个组中,您可以访问相同的 fileManager 路径
如果您想在主项目和应用程序扩展之间共享数据,则必须启用 AppGroups
。
可在此处找到启用它和共享数据的完整教程 (http://www.theappguruz.com/blog/ios8-app-groups)。
启用AppGroups
后,您可以像这样将创建的贴纸存储在共享容器中:
if let fileManager = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "")
{
let imageName = "imageName" // write your image name here
let imageLocationUrl = fileManager.appendingPathComponent(imageName)
// for saving image
if let data:Data = UIImagePNGRepresentation(image) {
do {
try data.write(to: imageLocationUrl)
}catch {
// couldn't write
}
}
}
获取图片,
if let fileManager = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "")
{
let imageName = "imageName" // write your image name here
let imageLocationUrl = fileManager.appendingPathComponent(imageName)
// for getting image
if let data:Data = Data(contentsOfFile: imageLocationUrl.path) {
let image = UIImage(data: data, scale: UIScreen.main.scale)
}
}