尽管缓存目录中存在文件,但 UIImage(contentsOfFile:) 返回 nil [重复]

2023-12-29

我正在尝试将带有叠加层的地图快照保存在缓存目录中,并在存在时检索它。然而,尽管创建了文件,但当我尝试检索它时, UIImage(contentsOfFile:) 返回 nil 。我已经打印了写入和读取的文件路径,它们是相同的,并且通过下载容器并检查目录和文件确实存在来验证文件是否存在。

知道这里的问题是什么吗?

let cachesDirectory: URL = {
    let urls = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask)
    return urls[urls.endIndex - 1]
}()

let mapCachesDirectory = cachesDirectory.appendingPathComponent("map-snapshots", isDirectory: true)

func configureMap(data: NSSet?) {
    mapView.isZoomEnabled = false
    mapView.isScrollEnabled = false
    mapView.isUserInteractionEnabled = false

    guard let data = data as? Set<SessionData>, data.count > 0 else { return }

    activityIndicatorView.isHidden = false
    activityIndicatorView.startAnimating()

    DispatchQueue.global(qos: .userInitiated).async {
        var points = [CLLocationCoordinate2D]()
        for object in data {
            guard object.locationLatitude != 0, object.locationLatitude != 0 else { continue }
            points.append(CLLocationCoordinate2DMake(object.locationLatitude, object.locationLongitude))
        }
        DispatchQueue.main.async(execute: {
            self.createOverlay(points: points)
            self.activityIndicatorView.stopAnimating()
            self.activityIndicatorView.isHidden = true
            self.cacheMapImage(view: self.mapView)
        })
    }
}

func cacheMapImage(view: UIView) {
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, true, 0)
    view.drawHierarchy(in: view.bounds, afterScreenUpdates: true)
    let compositeImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    DispatchQueue.global(qos: .userInitiated).async {
        if let compositeImage = compositeImage, let info = self.info {
            let data = UIImagePNGRepresentation(compositeImage)
            do {
                var isDirectory: ObjCBool = false
                let fileManager = FileManager.default
                if fileManager.fileExists(atPath: self.mapCachesDirectory.absoluteString, isDirectory: &isDirectory) == false {
                    try fileManager.createDirectory(at: self.mapCachesDirectory, withIntermediateDirectories: true, attributes: nil)
                }
                let fileURL = self.mapCachesDirectory.appendingPathComponent(info.uid).appendingPathExtension("png")
                try data?.write(to: fileURL)
                print("\(fileURL.absoluteString) Saved")
            } catch {
                log.error(error)
            }
        }
    }
}

func cachedMapImage() -> UIImage? {
    guard let info = info else { return nil }
    let filePath = mapCachesDirectory.appendingPathComponent(info.uid).appendingPathExtension("png").absoluteString
    let image = UIImage(contentsOfFile: filePath)
    print("\(filePath): \(image)")
    return image
}

func createOverlay(points: [CLLocationCoordinate2D]) {
    guard points.count > 0 else { return }

    let overlay = MKGeodesicPolyline(coordinates: points, count: points.count)
    mapView.add(overlay)

    let inset: CGFloat = 50.0
    mapView.setVisibleMapRect(overlay.boundingMapRect, edgePadding: UIEdgeInsetsMake(inset,inset,inset,inset), animated: true)
}

问题在于您正在使用 URL 属性absoluteString,而您应该使用路径属性。和...之间的不同absoluteString and path属性的问题是absoluteString包含文件url方案(“file://”),这就是它在应该是其路径的地方找不到文件的原因,但它实际上是它的absoluteString。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尽管缓存目录中存在文件,但 UIImage(contentsOfFile:) 返回 nil [重复] 的相关文章

  • iOS SecItemCopyMatching RSA 公钥格式?

    我正在尝试从已生成的密钥对 两个SecKeyRefs 以便通过线路发送 我所需要的只是一个简单的 modulus exponent 对 它应该正好占用 131 个字节 模数为 128 指数为 3 但是 当我获取关键信息时NSData对象 我
  • 从软件查找服务返回无效结果

    我尝试通过 XCode 组织者提交 iOS 应用程序 但在身份验证后失败 组织者说 从软件查找服务返回的结果无效 我怎么解决这个问题 检查 iTunes Connect 中您的应用程序状态是否为 等待上传 您可以更改状态以按 准备上传二进制
  • Draggable Boxview 不更新 Xamarin

    我的第一个问题是框视图生成在左上角 而不是我指定的设计网格第 10 行和网格第 3 列 第二个问题在于可拖动视图 在代码本地可拖动视图的第一部分中 它正确地调用了触摸事件 但也许它没有在GUI中更新
  • sizeToFit 运行异常

    我有一段代码 每次发生后端数据库更改时都会执行 本质上我在父视图中有一个标签 标签由许多状态消息之一更新 每个状态消息位于不同的行上 并以换行符 n 结尾 每条状态消息只能在一行上 并且不能过多 我遇到的问题是 当视图首次重新加载时 一切正
  • NSIndexpath.item 与 NSIndexpath.row

    有谁知道之间的区别NSIndexpath row and NSIndexpath item 具体来说 我在以下情况中使用哪一个 UITableViewCell tableView UITableView tableView cellForR
  • 从 iOS 设备向 Google App Engine 进行身份验证

    我正在开发一个 iPhone 应用程序 它使用 Google 应用程序引擎来托管后端 我需要通过 Google 进行身份验证 但我似乎无法找到从我的应用程序中执行此操作的方法 看来我要做一个UIWebView让用户登录到我从 Google
  • 设置UITextField的光标位置

    我查看了单点触控示例并尝试过 var range new NSRange selectionStart 1 NumberTextField SelectedTextRange IndexedRange GetRange range 但这会在
  • 致命错误:在 flutter 中找不到“Flutter/Flutter.h”文件

    这是错误 在文件中包含来自 Users chetan pub cache hosted pub dartlang org webview flutter 1 0 7 ios Classes JavaScriptChannelHandler
  • WKWebView在后台,几个奇怪的断言

    我想找出iOS中当前浏览器的userAgent 所以在 Xcode 创建的默认项目中我添加了 import ViewController h import
  • 如何在 Swift 中使用 deltaTime 正确计算 1 秒

    我正在尝试计算经过的秒数deltaTime但我不知道该怎么做 因为我的deltaTime不断打印 0 0166 或 0 0167 这是我的代码 override func update currentTime CFTimeInterval
  • 使用基于 Cookie 的身份验证的 Capacitor iOS

    我正在使用 Capacitor v3 NextJS 静态导出和 Django 后端基于生产网站构建 iOS 应用程序 当前的后端身份验证方案通过 cookie 使用 Django 会话 并通过 cookie 设置 CSRF 令牌 应用程序可
  • 使用什么来移动 UIView self.frame 或 self.transform 属性?

    这个问题我有点困惑 我知道我可以改变观点self frame origin 但我发现有一个名为 变换 的属性 我认为这是用于在屏幕上移动我的视图等 也许我有点不明白 所以我想知道 我必须使用哪个房产来搬家UIView 或者它的子类 另一个类
  • 重新组织链式可观察量

    我有一大块链接的 Rx 可观察量 当通过选择表视图行时会触发这些可观察量table rx modelSelected 我希望能够打破这个逻辑 因为我目前必须在flatMapLatest 因为这是流程的 第一步 感觉不对 我必须在后续执行更多
  • 如何将 SCNPlane 颜色更改为透明颜色

    我正在开发一个 ARKit 项目 在水平面上点击时需要波纹动画效果 为此 我采用了 UIView 对象并将其作为 SCNPlane 对象材料的内容传递 我已将波纹动画添加到 UIView 对象 一切正常 但我无法将 SCNPlane 颜色更
  • UIView 周围的虚线边框

    如何在周围添加虚线边框UIView 像这样的东西 如果您喜欢子层 还有另一种方法 在您的自定义视图的 init 中 输入以下内容 border 是 ivar border CAShapeLayer layer border strokeCo
  • 移动设备上的 TensorFlow(Android、iOS、Windows Phone)

    我目前正在寻找不同的深度学习框架 特别是用于训练和部署卷积神经网络 要求是 它可以在带有 GPU 的普通 PC 上进行训练 但训练后的模型必须部署在三个主要的移动操作系统上 即 Android iOS 和 Windows Phone Ten
  • Swift 错误:发出 SIGABRT 信号如何解决

    我只是 Swift 编码的初学者 我的想法很简单 就是一个有两个按钮的应用程序 单击时 文本字段将更改其文本 在 Main StoryBoard 中 我添加一个文本字段和两个按钮 在 ViewController swift 文件中 我这样
  • 如何将NSTextView的格式化内容转换为字符串

    我需要将 NSTextView 的内容从 Mac 应用程序传输到 iOS 应用程序 我使用 XML 作为传输文件格式 所以我需要将 NSTextView 的内容 文本 字体 颜色等 保存为字符串 有什么办法可以做到这一点吗 一种方法是存档
  • 应用程序仅启用纵向,但 UIImagePickerController 在 iOS6 中旋转

    请注意 下面的答案 不适用于 iOS6 所以我仍然需要答案 我的应用程序仅启用纵向模式 但是 如果我将 UIImagePickerController 作为子视图嵌入其中 并旋转设备 则顶部和底部栏将保持在同一位置 但 UIImagePic
  • 构建 iOS 应用程序后退出代码 1 错误

    我正在尝试使用 RestKit 构建我的项目 当我构建它时 我收到以下错误 我尝试使用 Apple LLVM 3 0 和 LLVM GCC 4 2 进行编译 两者都产生相同的结果 任何人有任何想法是什么导致了这个问题 Ld Users Ji

随机推荐

  • Mat扩展面板默认打开的bug?

    自从 Angular 5 发布以来 我的垫子扩展面板出现了一些问题 它们是默认打开的 我不明白为什么 my html div div
  • 有没有一个脚本可以列出我创建的 git 分支?

    我知道分支并不真正存储创建者信息 它们只是指向提交的指针 我的目标是能够清理已合并回主分支的旧分支 并列出尚未完成此操作的分支 清理 这与 查找未合并的分支 不同 因为我也想查找合并的分支 并且我想由作者来完成 我的问题是 有没有一个脚本可
  • phpmyadmin - 错误 2002 - 在 Mac 上

    我目前使用的是Mac 运行的操作系统版本是El Capitan 网络根目录是 Users username Sites 我下载并解压了 phpmyadmin 并将目录移动到根文件夹 然后我成功进入了登录屏幕 但是当我尝试登录时 它显示这样的
  • 在运行时加载类时无法创建 bean

    我有两个工作方式不同的项目 第一个用于类加载 第二个有其类用于执行一些处理工作 在第一个项目中 我加载该类 而不是创建新实例来调用该方法 我仅使用应用程序上下文 Autowired ApplicationContext context Cl
  • DSN 连接和带有 @ 的密码

    我考虑切换到使用 DSN 连接的数据库访问库 connect mysql login password database options DSN 使用 作为分隔符 这是否意味着密码不能包含 符号 还有其他限制吗 任何特殊字符对于 DSN 来
  • UIToolbar 的颜色没有改变

    我创建了一个 UIToolbar 我正在尝试使用以下方法将其变为黑色 toolbar barStyle UIBarStyleBlackOpaque or 工具栏background财产 但在任何一种情况下其颜色都不会改变 我怎样才能改变它
  • 在 OOP 中,什么是转发?它与委托有何不同?

    有人可以解释一下转发和委托之间的区别吗 它们看起来很相似 但我一直无法找到转发的良好定义 所以我不确定我是否真的理解 我们首先定义两个术语 sender the object that sends a message task to ano
  • 如何在execlp()之后找到程序的返回值? [复制]

    这个问题在这里已经有答案了 我在c中有以下代码 execlp ReturnValue c ReturnValue c应该返回0 3之间的整数 并且由于程序成功运行时execlp不会返回任何内容 那么如何获取该程序的返回值 你可以这样做 pi
  • 构建目录中的所有项目

    我尝试构建位于根目录的单独目录中的插件
  • 更改 blogdown 帖子的默认目录

    我正在使用的 Hugo 主题的帖子位于 content blog目录 而默认创建的新帖子blogdown new post is the content post目录 从函数定义来看 有一个全局选项可以更改新帖子保存到的目录 帮助也指出了这
  • IE 7、IE 8 等多选项卡浏览器会话问题

    由于会话对象 我对所有多选项卡浏览器都存在问题 我有一个要求 每当用户打开一个新浏览器时 我需要显示不同的值 所以我想到使用 Session 就像 IE 6 中每个浏览器都会创建一个新会话一样 但所有其他多选项卡浏览器 IE 7 和 IE
  • 如何从Thread获取返回值?

    我在用Thread for Webservice但我无法从中获取数据Thread因为我无法返回数据Thread 这是我的WebService java public class Webservice static String result
  • Java(桌面)应用程序的“自动更新”?

    您推荐什么系统来为某些 java 桌面 应用程序实现 自动更新 我还想安装和更新模块 插件 想想 Eclipse 和 Firefox 我知道 Eclipse RCP 的 OSGi 内容 NetBeans RCP 也有一些内容 是否必须完全购
  • 如何使用 IE7 Javascript 内存泄漏检测器?

    我下载了 SO 上其他地方提到的 IE 的 Javascript Memory Leak Detector 也在这里 http blogs msdn com askie archive 2008 12 31 javascript memor
  • Dynatree 展开所选节点的父级

    我的页面上运行良好的 Dynatree 我正在使用 initAjax 来获取结构 当我生成 json 时 我包含 选择 真在适当的地方选择复选框 大多数 所有 复选框都位于从根向下三层的深度 我想展开所选节点的父级 以便用户在页面加载时可以
  • 在网页中嵌入 Powerpoint

    有没有办法仅使用标准标签等将 PowerPoint 幻灯片嵌入到 HTML 页面中 我尝试使用 iframe 但这只会导致 PowerPoint 被下载 Your browser does not support 我正在寻找一种仅使用标准内
  • Rails simple_nested_form_for fields_for 参数数量错误

    所以我正在 Rails 3 1 中构建一个表单 使用 但部分中的这一行导致了问题 h2 Badges h2 ul this following line is raising the error wrong number of argume
  • Heroku 上的 Ruby 守护进程

    我正在尝试执行 ruby 守护进程无框架Heroku 上的应用程序 但在尝试执行工作程序后崩溃 heroku worker 1 State changed from crashed to starting heroku worker 1 S
  • Java-允许一个线程更新值,其他线程等待并跳过关键部分

    您好 我遇到一种情况 我必须只允许一个线程更新变量 有一个触发器 它可能会调用多个线程来更新此变量 但是更新应该仅由到达关键部分的第一个线程发生一次 理想情况下 流程应如下所示 线程1 调用 Thread 2 和 Thread 3 来更新由
  • 尽管缓存目录中存在文件,但 UIImage(contentsOfFile:) 返回 nil [重复]

    这个问题在这里已经有答案了 我正在尝试将带有叠加层的地图快照保存在缓存目录中 并在存在时检索它 然而 尽管创建了文件 但当我尝试检索它时 UIImage contentsOfFile 返回 nil 我已经打印了写入和读取的文件路径 它们是相