PHAssetResource.assetResources(for:asset).first.OriginalFilename在300个资产之后给出nil

时间:2017-01-30 11:29:38

标签: ios swift xcode phasset

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。 任何人都可以帮我解决这个问题吗? 提前谢谢。

2 个答案:

答案 0 :(得分:1)

这看起来像我曾经遇到的错误:PHAsset assetResourcesForAsset fails when called too often

事实证明这是一个糟糕的内存管理问题。在某些时候,设备的空闲RAM非常低,当它开始返回nil时就是这样。 通过将周围的操作放在autorelease块(我正在加载PHAsset)中,问题就消失了。

我仍然有一些罕见的情况,原始文件名是nil(或资产没有资源,我真的不知道),但这可能来自资产中的错误)。

答案 1 :(得分:0)

对于某些资产,iOS照片库中似乎缺少originalFilename。这可能由于不同的原因而发生(错误,某些资产是从iCloud恢复的)。你应该在你的代码中处理这种情况,例如当缺少originalFilename时,生成一个自己的文件名(例如一个基于UUID的文件名)。