Использование Realm с MPMediaQuery

Я хочу создать аудиокнигу, которая может устанавливать закладки. Загрузка аудиокниг из моей библиотеки с помощью MPMediaQuery работает нормально, но когда я вынимаю аудиокнигу через iTunes, она остается в моем реальном файле.

Я хотел бы, чтобы realm автоматически удалил запись, когда список воспроизведения обновляется через iTunes, но я не могу понять, как это сделать.

Вот мой код

class Books: Object {

dynamic var artistName: String?
dynamic var albumTitle: String?
dynamic var artwork: NSData?
dynamic var albumUrl: String?

dynamic var persistentID: String?

let parts = List<BookParts>()

override static func primaryKey() -> String? {
    return "persistentID"
}

override class func indexedProperties() -> [String] {
    return ["albumTitle"]
}

convenience init(artistName: String, albumTitle: String, albumUrl: String) {
    self.init()
    self.artistName = artistName
    self.albumTitle = albumTitle
    self.albumUrl = albumUrl
}


class BookQuery {

let realm = try! Realm()
var bookItems = Array<Books>()
var partItems = Array<BookParts>()

func getBooks() {

    let query: MPMediaQuery = MPMediaQuery.audiobooks()
    query.groupingType = .album
    let collection: [MPMediaItemCollection] = query.collections!

    try! realm.write {

        for allbooks in collection {
            let item = allbooks.representativeItem
            let book = Books()

            let id = item?.value(forProperty: MPMediaItemPropertyAlbumPersistentID) as! Int

            book.artistName = item?.artist
            book.albumTitle = item?.albumTitle
            book.albumUrl = item?.assetURL?.absoluteString
            book.artwork = Helper.getArtwork(item?.artwork) as NSData?
            book.persistentID = id.stringValue

            realm.add(book, update: true)

            guard realm.object(ofType: Books.self, forPrimaryKey: "persistentID") != nil else {
                continue
            }
            bookItems.append(book)

            }
        }
    }
}

Я вызываю MediaQuery в "viewDidLoad" в моем LibraryViewController. Я довольно новичок в кодировании и пытаюсь решить это некоторое время. Спасибо за любую помощь.

1 ответ

Главное, что вам нужно сделать, - это определить способ обновления списка воспроизведения iTunes, а затем удалить соответствующие объекты удаленных элементов из области.

Общий подход к этому состоит в том, чтобы получить все "постоянные идентификаторы", которые в настоящее время находятся в области, в начале цикла for, поместить их в массив, удалить каждый идентификатор, который он видит из массива, а затем удалить объекты с постоянным идентификатором в массив, который остался, так как их не было в коллекции.

Другие вопросы по тегам