Как получить списки исполнителей с помощью MPMediaQuery?

Здравствуйте, я пытаюсь получить Artist с помощью MPMediaQuery в iOS со следующим кодом.

На мой взглядDidLenter code hereoad

MPMediaQuery *query = [MPMediaQuery artistsQuery];
self.arrayOfArtist = [query collections];

И в моем cellForRowAtIndexPath

   cell.textLabel.text = [NSString stringWithFormat:@"%@",[[self.arrayOfArtist objectAtIndex:indexPath.row] valueForProperty:MPMediaItemPropertyArtist]];

Когда я проверяю NSLog, мой счет arrayOfArtist составляет около 330.

Однако в моем UITableView отображается только NULL.

Есть ли что-то, что я нарушаю?


person Fire Fist    schedule 28.01.2013    source источник


Ответы (3)


вы должны написать:

cell.textLabel.text = [NSString stringWithFormat:@"%@",[[[self.arrayOfArtist objectAtIndex:indexPath.row] representativeItem] valueForProperty:MPMediaItemPropertyArtist]];
person Matthias Nagel    schedule 28.01.2013

Вы можете использовать код для поиска исполнителей и их песен.

    /// Get all artists and their songs
///
func getAllArtists() {
    let query: MPMediaQuery = MPMediaQuery.artists()
    let allArtists = query.collections

    allArtistItems?.removeAll()

    guard allArtists != nil else {
        return
    }

    for collection in allArtists! {
        let item: MPMediaItem? = collection.representativeItem




        let artistName = item?.value(forKey: MPMediaItemPropertyArtist) as? String ?? "<Unknown>"
        let artistId = item!.value(forProperty: MPMediaItemPropertyArtistPersistentID) as! NSNumber

        let artist = Artist()
        artist.name = artistName
        artist.artistId = String(describing: artistId)
        print("Artist name: \(artistName)")

        // Get all songs of this Artist
        let mediaQuery = MPMediaQuery.songs()
        let predicate = MPMediaPropertyPredicate.init(value: artistId, forProperty: MPMediaItemPropertyArtistPersistentID)
        mediaQuery.addFilterPredicate(predicate)
        let song = mediaQuery.items

        if let allSongs = song {
            var index = 0

            for item in allSongs {
                let pathURL: URL? = item.value(forProperty: MPMediaItemPropertyAssetURL) as? URL
                if pathURL == nil {
                    print("@Warning!!! Track : \(item) is not playable.")
                } else {
                    let trackInfo = SongItem()
                    trackInfo.index = index
                    trackInfo.mediaItem = item

                    let title = item.value(forProperty: MPMediaItemPropertyTitle) as? String ?? "<Unknown>"
                    let artistName = item.value(forProperty: MPMediaItemPropertyArtist) as? String ?? "<Unknown>"
                    trackInfo.songName = title
                    trackInfo.artistName = artistName

                    trackInfo.isSelected = false
                    trackInfo.songURL = item.value(forProperty: MPMediaItemPropertyAssetURL) as? URL
                    artist.songs?.append(trackInfo)
                    index += 1
                }
            }

        }

        // Finally add the album object to albums array
        allArtistItems?.append(artist)

    }


    print("Total Artist count: \(allArtistItems?.count)")

}
person Abdul Yasin    schedule 03.10.2016
comment
Чувак, это вопрос о цели C, зачем давать быстрый ответ? - person Jobalisk; 13.12.2018
comment
Логика остается прежней. Я считаю, что любой, кому нужна помощь, может преобразовать этот код в Objc. Пожалуйста, дайте мне знать, я могу сделать то же самое. - person Abdul Yasin; 13.12.2018
comment
Привет. Можете ли вы дать мне ссылку с учебным пособием или образцом кода, чтобы получить список исполнителей из моей библиотеки iPhone (например, музыкальное приложение Apple)? С разделами: A, B, C... и строками, соответствующими разделам (имена исполнителей). Именно то, что делает музыкальное приложение Apple. Невозможно найти полный код, чтобы понять, как это работает. Нет информации. Я в отчаянии. Я буду признателен за вашу помощь. Спасибо. - person Markus; 06.05.2020
comment
Ну есть информация: документация Apple. Но я либо тупой, либо у меня нет возможности написать код, чтобы я мог чего-то добиться. Мне удалось показать песни только в TableView. - person Markus; 06.05.2020

Вам нужно получить свойство исполнителя, а затем сохранить его в массиве. Метод valueForProperty работает неправильно, если вы пытаетесь использовать его в стандартном массиве.

person Makleesh    schedule 28.01.2013