2017-01-19 6 views
0

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

Я хотел бы, чтобы область удаляла запись автоматически, когда плейлист обновляется через 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» в своем библиотечном контролере. Я довольно новичок в кодировании и пытаюсь решить это некоторое время. Спасибо за любую помощь.

ответ

0

На самом высоком уровне вам нужно будет определить, когда обновлен плейлист iTunes, а затем удалите соответствующие объекты из объектов Realm.

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

+0

Спасибо, попробуем это. – cmag0505

Смежные вопросы