1

I am trying to print out a list of the genres in my personal library. I am running into a huge problem where I cannot get the actual names of these genres.

The code I have is:

// Initialization: 
let query = MPMediaQuery()

let result = query.items
print("count:  \(result?.count)") //This returns the amount of items in my library

Now here is where the problem is:

query.groupingType = MPMediaGrouping.genre 
var genreArray = query.collections
print(genreArray)

When I go to print it out, it gives me a list of MPConcreteMediaItemCollection items with a hexadecimal following:

<MPConcreteMediaItemCollection: 0x1c00cbf30>, <MPConcreteMediaItemCollection: 0x1c00cbfa0>, <MPConcreteMediaItemCollection: 0x1c00cc010>, <MPConcreteMediaItemCollection: 0x1c00cc080>, <MPConcreteMediaItemCollection: 0x1c00cc0f0>, <MPConcreteMediaItemCollection: 0x1c00cc160>, <MPConcreteMediaItemCollection: 0x1c00cc1d0>, <MPConcreteMediaItemCollection: 0x1c00cc240>, <MPConcreteMediaItemCollection: 0x1c00cc2b0>, <MPConcreteMediaItemCollection: 0x1c00cc320>, <MPConcreteMediaItemCollection: 0x1c00cc390>, <MPConcreteMediaItemCollection: 0x1c00cc400>, <MPConcreteMediaItemCollection: 0x1c00cc470>, <MPConcreteMediaItemCollection: 0x1c00cc4e0>, <MPConcreteMediaItemCollection: 0x1c00cc550>, <MPConcreteMediaItemCollection: 0x1c00cc5c0>, <MPConcreteMediaItemCollection: 0x1c00cc630>, <MPConcreteMediaItemCollection: 0x1c00cc6a0>, <MPConcreteMediaItemCollection: 0x1c00cc710>, <MPConcreteMediaItemCollection: 0x1c00cc780>, <MPConcreteMediaItemCollection: 0x1c00cc7f0>, <MPConcreteMediaItemCollection: 0x1c00cc860>, <MPConcreteMediaItemCollection: 0x1c00cc8d0>, <MPConcreteMediaItemCollection: 0x1c00cc940>, <MPConcreteMediaItemCollection: 0x1c00cc9b0>, <MPConcreteMediaItemCollection: 0x1c00cca20>, <MPConcreteMediaItemCollection: 0x1c00cca90>, <MPConcreteMediaItemCollection: 0x1c00ccb00>, <MPConcreteMediaItemCollection: 0x1c00ccb70>, <MPConcreteMediaItemCollection: 0x1c00ccbe0>, <MPConcreteMediaItemCollection: 0x1c00ccc50>, <MPConcreteMediaItemCollection: 0x1c00cccc0>, <MPConcreteMediaItemCollection: 0x1c00ccd30>, <MPConcreteMediaItemCollection: 0x1c00ccda0>, <MPConcreteMediaItemCollection: 0x1c00cce10>, <MPConcreteMediaItemCollection: 0x1c00cce80>, <MPConcreteMediaItemCollection: 0x1c00ccef0>, <MPConcreteMediaItemCollection: 0x1c00ccf60>, <MPConcreteMediaItemCollection: 0x1c00ccfd0>, <MPConcreteMediaItemCollection: 0x1c00cd040>, <MPConcreteMediaItemCollection: 0x1c00cd0b0>])

How do I get these values to equate to the actual genre names?

marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
Jordan Heath
  • 114
  • 8
  • It's a **query** (not a "quary") .... – marc_s Feb 10 '18 at 19:33
  • @JordanHealth did my answer help you at all? – Daniel Feb 12 '18 at 22:06
  • Yes it did but now i have another problem... how will i extract all of the songs from each genre that the user decides to pick? @Dopapp – Jordan Heath Feb 13 '18 at 03:31
  • That you should post as a separate question. If my answer below answered this question that you posted above, feel free to click the check mark next to it. If you post a new question (as you should), it will also get more attention than a relatively old question like this one. – Daniel Feb 13 '18 at 03:41
  • I am not able to for some reason..I checked your question as helpful.. If you know of any good reference please let me know. the apple dev reference is very short and hard to follow @Dopapp – Jordan Heath Feb 13 '18 at 03:51
  • I just asked but it is a very specific problem – Jordan Heath Feb 13 '18 at 03:51

1 Answers1

1

Here is the documentation for MPMediaItemCollection, which is the object stored in query.collections.

Each MPMediaItemCollection has an items property, which is an array of MPMediaItems. Each MPMedaItem has a genre property, which is what you are looking for.

If the predicate for your query is by genre, then you could say:

for collection in query.collections {
    let genre = collection.representativeItem?.genre
    // ...
}

Otherwise, you will have to loop through each item:

for collection in query.collections {
    for item in collection.items {
        let genre = item.genre
        // ...
    }
}
marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
Daniel
  • 3,188
  • 14
  • 34