extension PHAsset {
var originalFilename: String? {
var fname:String?
let resources = PHAssetResource.assetResources(for: self)
if let resource = resources.first {
fname = resource.originalFilename
}
return fname
}
}
我正在使用此PHAsset扩展来获取资产的原始文件名。大约有2000个资产,此扩展名提供前300个资产的原始文件名,之后返回nil。我很困惑,怎么可能呢? Xcode中有任何错误吗?但我使用的是Xcode 8.1和swift 3.0。 任何人都可以帮我解决这个问题吗? 提前谢谢。
答案 0 :(得分:1)
这看起来像我曾经遇到的错误:PHAsset assetResourcesForAsset fails when called too often
事实证明这是一个糟糕的内存管理问题。在某些时候,设备的空闲RAM非常低,当它开始返回nil
时就是这样。
通过将周围的操作放在autorelease
块(我正在加载PHAsset
)中,问题就消失了。
我仍然有一些罕见的情况,原始文件名是nil
(或资产没有资源,我真的不知道),但这可能来自资产中的错误)。
答案 1 :(得分:0)
对于某些资产,iOS照片库中似乎缺少originalFilename。这可能由于不同的原因而发生(错误,某些资产是从iCloud恢复的)。你应该在你的代码中处理这种情况,例如当缺少originalFilename时,生成一个自己的文件名(例如一个基于UUID的文件名)。