前提・実現したいこと
再生中の曲の情報を表示するアプリを作っています。
MPMediaItem
を参照して、タイトル(.title
)やアーティスト名など大概のデータは取得できるのですが、iTunesの「曲のプロパティ(windows)」「情報を見る(Mac)」で書き換えることができる「年」という部分を表示することができません・・・
これです↓
iPadでいうところのこれです↓
試したこと
MPMediaItem
に.releaseDate
プロパティというのを見つけて、データフォーマットのインスタンスを宣言したりして色々やってみたのですが、表示させようとするとクラッシュしてしまいました・・・
また、調べてみると英語のstackoverflowでやはり年を取得しようとしている方がいて、MPMediaQuery
を使っていたようなのですが(ベストアンサーなしのまま数年が経ってましたが)、オリジナルclassを作ってMPMediaQueryから引っ張ってこないといけないなんて回りくどすぎると思ってしまいました。
質問
iTunesで設定する「年」という項目は、.releaseDate
と同義でしょうか?
また、「年」を取得するには、どうしたらいいのでしょうか?
yearLabel.text = /*ここがわかりません*/
よろしくお願いします。
補足情報(言語/FW/ツール等のバージョンなど)
xcode8 swift3
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
テスト環境
- MacOS Sierra 10.12.6
- Xcode 9.2 Build version 9C40b
- Apple Swift version 4.0.3 (swiftlang-900.0.74.1 clang-900.0.39.2)
ソース
iTunes
では年が表示されているのに、
releaseDate
とvalue(forProperty: MPMediaItemPropertyReleaseDate)
で
nil
を返すケースがありますね。Open Radar では不具合とされています。
そのケースでも、value(forProperty: "year")
で値が取得できました。そちらも利用してみてください。
import AVFoundation
import MediaPlayer
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let albumsQuery = MPMediaQuery.albums()
guard let albums: [MPMediaItemCollection] = albumsQuery.collections else {
print("error")
return
}
for album in albums {
let title = album.representativeItem?.albumTitle ?? ""
let artist = album.representativeItem?.albumArtist ?? ""
let releaseDate = album.representativeItem?.releaseDate
let propertyReleaseDate = album.representativeItem?.value(forProperty: MPMediaItemPropertyReleaseDate)
let year = album.representativeItem?.value(forProperty: "year")
print("title: \(title)")
print("artist: \(artist)")
print("releaseDate: \(releaseDate)")
print("propertyReleaseDate: \(propertyReleaseDate)")
print("year: \(year)\n")
for single in (album.items) {
let singleTitle = single.value(forProperty: MPMediaItemPropertyTitle) ?? ""
let singleArtist = single.value(forProperty: MPMediaItemPropertyArtist) ?? ""
let singleReleaseDate = single.releaseDate
let singlePropertyReleaseDate = single.value(forProperty: MPMediaItemPropertyReleaseDate)
let singleYear = single.value(forProperty: "year")
print("singleTitle: \(singleTitle)")
print("singleArtist: \(singleArtist)")
print("singleReleaseDate: \(singleReleaseDate)")
print("singlePropertyReleaseDate: \(singlePropertyReleaseDate)")
print("singleYear: \(singleYear)\n")
}
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
サンプル
title: GOLDEN☆BEST 村下孝蔵ベスト・セレクト・ソングズ
artist: 村下孝蔵
releaseDate: nil
propertyReleaseDate: nil
year: Optional(2013)
singleTitle: 初恋
singleArtist: 村下孝蔵
singleReleaseDate: nil
singlePropertyReleaseDate: nil
singleYear: Optional(2013)
---略---
title: Songs of Innocence
artist: U2
releaseDate: Optional(2014-09-09 07:00:00 +0000)
propertyReleaseDate: Optional(2014-09-09 07:00:00 +0000)
year: Optional(2014)
singleTitle: The Miracle (Of Joey Ramone)
singleArtist: U2
singleReleaseDate: Optional(2014-09-09 07:00:00 +0000)
singlePropertyReleaseDate: Optional(2014-09-09 07:00:00 +0000)
singleYear: Optional(2014)
releaseDate
とvalue(forProperty: "year")
が一致しないケースもありました。
iTunes
で表示されているのは1981
です。
title: グレイテスト・ヒッツ
artist: クイーン
releaseDate: Optional(1981-10-26 08:00:00 +0000)
propertyReleaseDate: Optional(1981-10-26 08:00:00 +0000)
year: Optional(2011)
singleTitle: Bohemian Rhapsody (2011 Remaster)
singleArtist: クイーン
singleReleaseDate: Optional(1981-10-26 08:00:00 +0000)
singlePropertyReleaseDate: Optional(1981-10-26 08:00:00 +0000)
singleYear: Optional(2011)
参考
ios - Release Date of MPMediaItem returning Nil (Swift 4) - Stack Overflow
rdar://21765993: MPMediaItemPropertyReleaseDate returns nil although Music app shows year
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.32%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2018/01/02 22:05