0

我正在从 MPMediaItem 中获取元数据,如下所示:

let url = item.value(forProperty:MPMediaItemPropertyAssetURL) as? NSURL
let asset = AVURLAsset(url: url! as URL, options: nil)
let metaArray = asset.metadata
for metadata in metaArray{
    print("-----metadata:\(metadata)")
    print("-----metadata.key:\(String(describing: metadata.key))")
}

但是,当我打印出一块元数据时,“key”会打印为数值而不是“pcst”,如打印输出所示:

-----metadata:<AVMetadataItem: 0x1740153f0, identifier=itsk/pcst, keySpace=itsk, key class = __NSCFNumber, key=pcst, commonKey=(null), extendedLanguageTag=(null), dataType=com.apple.metadata.datatype.int8, time={INVALID}, duration={INVALID}, startDate=(null), extras={ dataLength = 1; dataType = 21; dataTypeNamespace = "com.apple.itunes"; }, value=1> -----metadata.key:Optional(1885565812)

所有元数据/密钥都发生这种情况(此特定媒体项目中有 29 个)。

还要注意这行代码:

let realString = NSString(string: metadata.key! as! String)

导致此错误: Could not cast value of type '__NSCFNumber' (0x1b80dcdf0) to 'NSString' (0x1b80edae8).

如何获取键 ("pcst") 的字符串值?

4

2 回答 2

1

可能您正在寻找的identifierAVMetadataItem.

for metadata in metaArray{
    print(metadata.identifier ?? "DefaultValue")       
}
于 2017-05-01T04:57:42.930 回答
0

如果其他人想查看我正在使用的代码:

func returnKeyString(_ inVal: String)->String{
    // expecting the metadata for "identifier" as input - returns key value
    // eg "itsk/ldes" ->  "ldes"
    // or "id3/%00WFD" etc.  -> "wfd"
    var sFinal:String = ""

    if (inVal.contains("/")){
        sFinal = (inVal.components(separatedBy: "/")[1])
    }
    if sFinal.contains("%"){
        sFinal = sFinal.components(separatedBy: "%")[1]
        let index1 = sFinal.index(sFinal.startIndex, offsetBy: 2)
        sFinal = sFinal.substring(from: index1)
    }
    return sFinal.lowercased()
}
于 2017-05-01T17:59:16.150 回答