I've stored the MPMediaItem returned from MPMediaPickerController by saving its persistentID (which is a MPMediaEntityPersistentID). When I pass this to MPMediaQuery what I get back is a MPMediaEntity (superclass of MPMediaItem). Trying to cast this to a MPMediaItem is giving an exception.
// recover MPMediaItem
let predicateId = MPMediaPropertyPredicate(value: self.persistentID?.uint64Value,
forProperty: MPMediaItemPropertyPersistentID,
comparisonType:MPMediaPredicateComparison.equalTo)
let query = MPMediaQuery.init()
query.addFilterPredicate(predicateId)
let collection = MPMediaItemCollection(items: query.items!)
//at this point collection[0] contains a MPMediaEntry