0

からStringとしてキー値を取得できません値の代わりにプリントアウトに示すように、「PCST」:は、私はこのようなMPMediaItemからメタデータをつかんだメタデータ

-----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")の文字列値を取得できますか?

答えて

1

あなたが探しているものはidentifierのプロパティAVMetadataItemです。ケースの他に

for metadata in metaArray{ 
    print(metadata.identifier ?? "DefaultValue")  
} 
+0

それはそれが動作するように見える... – wayneh

+0

それをテストするだけでは - 私はちょうどに文字列を解析する必要があります"/"の前の文字を削除し、 "/"とそれに続く4文字を削除します.... – wayneh

+0

@wayneh '/'で 'components(separatedBy:)'を使用し、結果の最後のオブジェクトにアクセスできます –

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() 
} 
関連する問題