QLTumbnailGenerator在多次调用(在实际设备上)iOS 13时开始失败
我试图创建多个钱包通行证(.pkpass)的缩略图,方法是在特定文件夹中的所有(大约200个)通行证上运行一个循环,并为每个通行证调用generateBestRepresentation(for:) 代码如下:QLTumbnailGenerator在多次调用(在实际设备上)iOS 13时开始失败,ios,swift,ios13,Ios,Swift,Ios13,我试图创建多个钱包通行证(.pkpass)的缩略图,方法是在特定文件夹中的所有(大约200个)通行证上运行一个循环,并为每个通行证调用generateBestRepresentation(for:) 代码如下: let passesDirURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("Passes") let size = CGS
let passesDirURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("Passes")
let size = CGSize(width: 1600, height: 1600)
let scale = UIScreen.main.scale
if let passURLs = try? FileManager.default.contentsOfDirectory(
at: self.passesDirURL,
includingPropertiesForKeys: nil,
options: .skipsHiddenFiles
),
!passURLs.isEmpty {
for passURL in passURLs {
// Create the thumbnail request.
let request = QLThumbnailGenerator.Request(
fileAt: passURL,
size: size,
scale: scale,
representationTypes: .thumbnail
)
// Retrieve the singleton instance of the thumbnail generator and generate the thumbnails.
let generator = QLThumbnailGenerator.shared
generator.generateBestRepresentation(for: request) { thumbnail, error in
if let error = error as? QLThumbnailError {
print ("Thumbnail generation error: \(error)")
print ("Thumbnail generation localizedDescription: \(error.localizedDescription)")
print ("Thumbnail generation errorUserInfo: \(error.errorUserInfo)")
print ("Thumbnail generation errorCode: \(error.errorCode)")
} else {
print ("Thumbnail generation OK")
//do something with thumbnail here
}
}
}
}
这在模拟器上运行得很好,但在实际设备(iphonexsmax)上,我迟早会出现错误,缩略图生成会在大部分过程中失败。输出如下所示:
Thumbnail 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})
Thumbnail generation localizedDescription: The operation couldn’t be completed. (QLThumbnailErrorDomain error 3.)
Thumbnail generation errorUserInfo: ["NSErrorFailingURLKey": file:///private/var/mobile/Containers/Data/Application/DCF703F7-9A1A-4340-86EB-42579D678EEF/Documents/Passes/pass123.pkpass]
Thumbnail generation errorCode: 3
错误描述听起来很混乱(“云中没有用于文件的缩略图”),因为这些不是iCloud文件
由于单独调用缩略图生成时不会发生错误,因此这似乎是内存/性能问题。我尝试了多种方法来解决这个问题,包括在for循环中使用一个信号量,等待generateebstrepresentation的一个调用完成,然后开始下一个调用,这减少了但没有消除这个问题。它工作正常的唯一方法是在semaphore.wait()语句之后添加一个非常长的睡眠(5秒),但这不是可接受的解决方案
我尝试的另一种方法是使用saveBestRepresentation(正如苹果的文档中所建议的),但这并没有解决问题
有没有人遇到过类似的问题,并且能够找到一个可接受的解决方案