我试图通过在特定文件夹中的所有(大约 200 个)通行证上运行循环并为每个通行证调用generateBestRepresentation(for:) 来创建多个钱包通行证(.pkpass)的缩略图。
\n\n这是代码:
\n\nlet passesDirURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("Passes")\nlet size = CGSize(width: 1600, height: 1600)\nlet scale = UIScreen.main.scale\n\nif let passURLs = try? FileManager.default.contentsOfDirectory(\n at: self.passesDirURL,\n includingPropertiesForKeys: nil,\n options: .skipsHiddenFiles\n ),\n !passURLs.isEmpty {\n for passURL in passURLs {\n // Create the thumbnail request.\n let request = QLThumbnailGenerator.Request(\n fileAt: passURL,\n size: size,\n scale: scale,\n representationTypes: .thumbnail\n )\n\n // Retrieve the singleton instance of the thumbnail generator and generate the thumbnails.\n let generator = QLThumbnailGenerator.shared\n generator.generateBestRepresentation(for: request) { thumbnail, error in\n if let error = error as? QLThumbnailError {\n print ("Thumbnail generation error: \\(error)")\n print ("Thumbnail generation localizedDescription: \\(error.localizedDescription)")\n print ("Thumbnail generation errorUserInfo: \\(error.errorUserInfo)")\n print ("Thumbnail generation errorCode: \\(error.errorCode)")\n } else {\n print ("Thumbnail generation OK")\n //do something with thumbnail here\n }\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这在模拟器上工作得很好,但在实际设备(iPhone Xs Max)上我迟早会开始遇到错误,并且大部分通道的缩略图生成都会失败。输出如下所示:
\n\nThumbnail generation error: related decl \'e\' for QLThumbnailError(_nsError: Error Domain=QLThumbnailErrorDomain Code=3 "No thumbnail in the cloud for file:///private/var/mobile/Containers/Data/Application/DCF703F7-9A1A-4340-86EB-42579D678EEF/Documents/Passes/pass123.pkpass" UserInfo={NSErrorFailingURLKey=file:///private/var/mobile/Containers/Data/Application/DCF703F7-9A1A-4340-86EB-42579D678EEF/Documents/Passes/pass123.pkpass})\nThumbnail generation localizedDescription: The operation couldn\xe2\x80\x99t be completed. (QLThumbnailErrorDomain error 3.)\nThumbnail generation errorUserInfo: ["NSErrorFailingURLKey": file:///private/var/mobile/Containers/Data/Application/DCF703F7-9A1A-4340-86EB-42579D678EEF/Documents/Passes/pass123.pkpass]\nThumbnail generation errorCode: 3\nRun Code Online (Sandbox Code Playgroud)\n\n错误描述听起来令人困惑(“云中没有文件的缩略图”),因为这些不是 iCloud 文件。
\n\n由于单独调用缩略图生成时不会发生错误,这似乎是一些内存/性能问题。我尝试通过多种方式解决问题,包括在 for 循环中使用信号量等待generateBestRepresentation 的一次调用完成以开始下一次调用,这减少了但没有消除问题。唯一没有错误的方法是在 semaphore.wait() 语句之后添加一个很长的睡眠(5 秒),但这不是可接受的解决方案。
\n\n我尝试的另一种方法是使用 saveBestRepresentation (如 Apple 文档中建议的那样),但这并没有解决问题。
\n\n有没有人遇到过类似的问题并能够找到可接受的解决方案?
\n| 归档时间: |
|
| 查看次数: |
653 次 |
| 最近记录: |