Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用MPMediaQuery检索艺术家列表?_Ios_Cocoa Touch_Mpmediaquery - Fatal编程技术网

Ios 如何使用MPMediaQuery检索艺术家列表?

Ios 如何使用MPMediaQuery检索艺术家列表?,ios,cocoa-touch,mpmediaquery,Ios,Cocoa Touch,Mpmediaquery,您好,我正在尝试使用以下代码在iOS中使用MPMediaQuery检索艺术家 在我的视图中,在此处输入代码 MPMediaQuery *query = [MPMediaQuery artistsQuery]; self.arrayOfArtist = [query collections]; 在mycellForRowAtIndexPath cell.textLabel.text = [NSString stringWithFormat:@"%@",[[self.arrayOfArtis

您好,我正在尝试使用以下代码在iOS中使用MPMediaQuery检索艺术家

在我的视图中,在此处输入代码

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

   cell.textLabel.text = [NSString stringWithFormat:@"%@",[[self.arrayOfArtist objectAtIndex:indexPath.row] valueForProperty:MPMediaItemPropertyArtist]];
当我使用
NSLog
进行检查时,我的
arrayOfArtist
计数约为330

但是在我的
UITableView
中,它只显示
NULL


有什么我搞错了吗?

您需要获取Artister属性,然后将其保存在数组中。如果您试图在标准阵列上使用valueForProperty方法,则该方法无法正常工作。

您应该编写:

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

您可以使用该代码检索艺术家及其歌曲

    /// 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)")

}
///获取所有艺术家及其歌曲
///
func getAllArtists(){
let query:MPMediaQuery=MPMediaQuery.artists()
让allArtists=query.collections
allArtistItems?.removeAll()
守卫所有人!=没有其他人{
返回
}
供所有艺术家收藏{
let项:MPMediaItem?=collection.representativeItem
将artistName=item?值(forKey:MPMediaItemPropertyAttribute)设为?字符串??“”
将artistId=item!.value(forProperty:MPMediaItemPropertyArtistPersistentID)设为!NSNumber
让艺术家=艺术家()
艺人名称=艺人名称
artist.artistId=字符串(描述:artistId)
印刷品(“艺术家姓名:\(艺术家姓名)”)
//获取此艺术家的所有歌曲
让mediaQuery=MPMediaQuery.songs()
let predicate=MPMediaPropertyPredicate.init(值:artistId,forProperty:MPMediaItemPropertyArtistPersistentID)
mediaQuery.addFilterPredicate(谓词)
让song=mediaQuery.items
如果让所有歌曲=歌曲{
var指数=0
对于所有歌曲中的项目{
将pathURL:URL?=item.value(forProperty:MPMediaItemPropertyAsetUrl)设为?URL
如果路径URL==nil{
打印(“@警告!!!曲目:\(项目)不可播放。”)
}否则{
让trackInfo=SongItem()
trackInfo.index=索引
trackInfo.mediaItem=项目
将title=item.value(forProperty:MPMediaItemPropertyTitle)设为?字符串??“”
将artistName=item.value(forProperty:MPMediaItemPropertyArtist)设为?字符串??“”
trackInfo.songName=标题
trackInfo.artistName=artistName
trackInfo.isSelected=false
trackInfo.songURL=item.value(forProperty:MPMediaItemPropertyAsetUrl)作为?URL
艺人.歌曲?.append(trackInfo)
指数+=1
}
}
}
//最后将album对象添加到albums数组
allArtistItems?.append(艺术家)
}
打印(“艺术家总数:\(allArtistItems?.count)”)
}

Dude,这是一个关于目标C的问题,为什么要用swift给出答案?逻辑还是一样的。我相信,任何需要帮助的人都可以将此代码转换为Objc。请让我知道,我也可以。你好。你能给我一个带教程或示例代码的链接,从我的iPhone库(比如苹果的音乐应用程序)中获取艺术家列表吗?包括:A、B、C。。。而与部分(艺术家姓名)对应的行正是苹果音乐应用程序所做的。要找到一个完整的代码来理解它是如何工作的是不可能的。没有任何信息。我绝望了。我将感谢你的帮助。谢谢。这里有一些信息:苹果的文档。但是我不是很笨,就是我没有办法写代码来完成一些事情。我只能在桌面视图中显示歌曲。