我在AppGroup中存储了一个图像,但我无法显示该图像,也不确定原因。
我的观点是:
Image(uiImage: getImageFromDir(imageName: name)!)
.resizable()
我使用以下功能获取图像:
func getImageFromDir(imageName: String) -> UIImage? {
let appGroupPath = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.myId")!
let imagePath = appGroupPath.appendingPathComponent(imageName)
do {
let imageData = try Data(contentsOf: imagePath)
return UIImage(data: imageData)
} catch {
print("Error loading image : (error)")
}
return nil
}
这运行良好,捕获块从未被击中,但图像仍然不可见。我最初的想法是我有一个无效的路径,但事实并非如此,因为我可以使用该路径在React Native中按预期加载图像。
我的风格也没有什么问题,因为从Assets.xassets加载的不同图像效果很好。
假设文件确实存在于指定位置(您可以验证为此生成的URL(,请尝试使用安全范围的资源包装器,如下面的
func getImageFromDir(imageName: String) -> UIImage? {
let appGroupPath = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.myId")!
let imagePath = appGroupPath.appendingPathComponent(imageName)
do {
if imagePath.startAccessingSecurityScopedResource() { // << this !!
defer {
imagePath.stopAccessingSecurityScopedResource() // << and this !!
}
let imageData = try Data(contentsOf: imagePath)
return UIImage(data: imageData)
}
} catch {
print("Error loading image : (error)")
}
return nil
}
虽然我的解决方案正在运行,但它不是我的图像没有显示的有效答案,如果有人知道谁将来会看到这篇文章,我仍然想知道为什么。
为了解决这个问题,我没有使用图像的绝对路径,而是使用base64字符串作为数据。图像现在成功显示。