PHAssetResource.assetResources(for: asset).first.OriginalFilename 在 300 个资产后给出 nil
PHAssetResource.assetResources(for: asset).first.OriginalFilename gives nil after 300 assets
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 个资产的原始文件名,之后是 returns nil。我很困惑,这怎么可能? Xcode 有什么错误吗?但是我使用的是 Xcode 8.1 和 swift 3.0。
谁能帮我解决这个问题?
提前致谢。
您的某些资产的 iOS 照片库中似乎缺少原始文件名。这可能由于不同的原因而发生(错误,某些资产已从 iCloud 恢复)。您应该在代码中处理这种情况,例如当缺少原始文件名时,生成自己的文件名(例如基于 UUID 的文件名)。
这看起来像是我曾经遇到的错误:PHAsset assetResourcesForAsset fails when called too often
事实证明这是一个糟糕的内存管理问题。在某个时候,设备的可用 RAM 非常低,那时它开始 return nil
。
通过将周围的操作放在 autorelease
块中(我正在加载 PHAsset
的地方),问题就消失了。
我仍然有一些罕见的情况,原始文件名是 nil
(或者资产没有资源,我真的不知道),但这可能来自资产中的错误。
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 个资产的原始文件名,之后是 returns nil。我很困惑,这怎么可能? Xcode 有什么错误吗?但是我使用的是 Xcode 8.1 和 swift 3.0。 谁能帮我解决这个问题? 提前致谢。
您的某些资产的 iOS 照片库中似乎缺少原始文件名。这可能由于不同的原因而发生(错误,某些资产已从 iCloud 恢复)。您应该在代码中处理这种情况,例如当缺少原始文件名时,生成自己的文件名(例如基于 UUID 的文件名)。
这看起来像是我曾经遇到的错误:PHAsset assetResourcesForAsset fails when called too often
事实证明这是一个糟糕的内存管理问题。在某个时候,设备的可用 RAM 非常低,那时它开始 return nil
。
通过将周围的操作放在 autorelease
块中(我正在加载 PHAsset
的地方),问题就消失了。
我仍然有一些罕见的情况,原始文件名是 nil
(或者资产没有资源,我真的不知道),但这可能来自资产中的错误。