2017-01-19 8 views
0

북마크를 설정할 수있는 Audiobookplayer를 만들고 싶습니다. MPMediaQuery를 사용하여 내 라이브러리에서 오디오 북을로드해도 문제가 없지만 iTunes를 통해 오디오 북을 가져 오면 내 realmfile에 남아 있습니다.렐름과 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) 

      } 
     } 
    } 
} 

내 LibraryViewController의 "viewDidLoad"에서 MediaQuery를 호출했습니다. 저는 코딩에 새로운 경험이 있으며 잠시 동안이 문제를 해결하려고합니다. 도움 주셔서 감사합니다.

답변

0

해야 할 일은 iTunes 재생 목록이 업데이트 된시기를 감지하고 제거 된 항목의 해당 객체를 영역에서 삭제하는 것입니다.

일반적인 접근법은 for 루프의 시작 부분에있는 현재 "영구 ID"를 모두 가져 와서 배열에 넣고 배열에서 보이는 각 ID를 제거한 다음 배열에 남아있는 영구 ID (컬렉션에없는 ID)

+0

감사합니다. – cmag0505