Мы не можем привязать это к setTimeout()
, поскольку он всегда выполняется с глобальным объектом (Window), если вы хотите получить доступ к контексту this
в функции обратного вызова, а затем с помощью bind()
к функции обратного вызова, которую мы можем достичь как:
setTimeout(function(){
this.methodName();
}.bind(this), 2000);
Должно быть, были некорректные символы или ошибка сравнения в запросе, вызванная преобразованием из MPMediaEntityPersistentID в String.
Я изменил код, чтобы вместо этого преобразовать в NSNumber и запрос теперь все альбомы находятся правильно.
измените эту часть в примере кода выше
String(identifier)
на
NSNumber(unsignedLongLong: identifier)
, так что это выглядит как
func queryMedia(identifier:MPMediaEntityPersistentID) -> MPMediaItemCollection {
let predicateId = MPMediaPropertyPredicate(value: NSNumber(unsignedLongLong: identifier), forProperty: MPMediaItemPropertyAlbumPersistentID, comparisonType:MPMediaPredicateComparison.EqualTo)
let query = MPMediaQuery.init()
query.addFilterPredicate(predicateId)
let collection = MPMediaItemCollection(items: query.items!)
return collection;
}