#swift #swiftui
#swift #swiftui
Вопрос:
У меня есть изображение, хранящееся внутри 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
}
Это работает нормально, и блок catch никогда не попадает, но изображение по-прежнему не отображается. Моей первоначальной мыслью было, что у меня неверный путь, но, похоже, это не так, поскольку я могу загрузить изображение, как ожидалось, в React Native, используя путь.
В моих стилях также нет ничего плохого, поскольку другое изображение, загруженное из Assets.xcassets, работает нормально.
Ответ №1:
Предполагая, что файл действительно существует в указанном месте (для этого вы можете проверить сгенерированный 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
}
Комментарии:
1. К сожалению, ImagePath.startAccessingSecurityScopedResource() возвращает false.
2. Я также могу абсолютно подтвердить, что путь к файлу указан правильно. При просмотре данных
imageData
и нажатии кнопки Экспорт -> сохранить какmyimage.jpg
я могу успешно открыть изображение в Finder.
Ответ №2:
Хотя мое решение работает, это неверный ответ на вопрос, почему мои изображения не отображаются, и я все равно хотел бы знать, почему, если кто-нибудь знает, кто столкнется с этим сообщением в будущем.
Чтобы решить эту проблему, вместо использования абсолютного пути к изображению я использовал строку base64 для использования в качестве данных. Теперь изображение успешно отображается.