首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将领域与MPMediaQuery结合使用

将领域与MPMediaQuery结合使用
EN

Stack Overflow用户
提问于 2017-01-19 16:12:36
回答 1查看 87关注 0票数 0

我想建立一个可以设置书签的有声读物播放器。使用MPMediaQuery从我的库中加载有声读物工作得很好,但是当我通过iTunes从我的realmfile中取出有声读物时,它停留在我的realmfile中。

我希望realm在通过iTunes更新播放列表时自动删除条目,但我似乎想不出怎么做。

这是我的代码。

代码语言:javascript
复制
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)

            }
        }
    }
}

我在我的LibraryViewController中调用"viewDidLoad“中的MediaQuery。我是编程新手,正在尝试解决这个问题一段时间。谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2017-02-09 05:09:32

您需要做的较高级别的事情是有一种方法来检测iTunes播放列表何时更新,然后从域中删除已删除项目的相应对象。

通常的方法是在for循环开始时获取域中当前所有的“持久ID”,将这些“持久ID”放入一个数组中,从数组中删除它看到的每个ID,然后删除左边数组中具有持久ID的对象,因为这些对象不在集合中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41736844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档