Правильный способ поиска постоянного идентификатора [duplicate]

Мы не можем привязать это к setTimeout(), поскольку он всегда выполняется с глобальным объектом (Window), если вы хотите получить доступ к контексту this в функции обратного вызова, а затем с помощью bind() к функции обратного вызова, которую мы можем достичь как:

setTimeout(function(){
    this.methodName();
}.bind(this), 2000);
0
задан rmaddy 1 January 2016 в 23:11
поделиться

1 ответ

Должно быть, были некорректные символы или ошибка сравнения в запросе, вызванная преобразованием из 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;
}
2
ответ дан Tom Ax 22 August 2018 в 04:16
поделиться
  • 1
    Это старый пост, но мы боролись с подобной проблемой. Для нас это было вызвано PersistentID (который является неподписанным Int64 или Unsigned long long), который неправильно преобразован в различные инструменты. Вероятно, что происходило в вашем случае, String преобразовывал его как знаковое значение, давая неверный результат. Я думаю, вы на правильном пути, чтобы заставить его быть неподписаннымLongLong. Вы должны быть осторожны с этим везде, когда используете PersistentID. – Jim Leask 27 March 2018 в 15:25
Другие вопросы по тегам:

Похожие вопросы: