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))") 
} 

을하지만, 나는 "키를"인쇄 된 메타 데이터의 블록이 숫자로 인쇄 얻을 때 대신으로 인쇄물에 나타낸 "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")에 대한 문자열 값을받을 수 있나요?

답변

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() 
}