回答編集履歴

1

サンプルコード追記

2016/11/21 15:00

投稿

TakeOne
TakeOne

スコア6299

test CHANGED
@@ -21,3 +21,161 @@
21
21
  そこにアクセスしたらよさそうに思いました。
22
22
 
23
23
  もしその場所がselfであれば、self.playlistでアクセスしたらいいですし、何かのタイミングでself.playlistをnilにすることがあるのなら、self.playlistがnilか確認してからアクセスしたらいいです。
24
+
25
+
26
+
27
+
28
+
29
+ (11/21 サンプルコード追記)
30
+
31
+
32
+
33
+ ``` Objective-C
34
+
35
+ #import "ViewController.h"
36
+
37
+
38
+
39
+ // AVPlayerItem擬似クラス
40
+
41
+ @interface AVPlayerItem : NSObject
42
+
43
+ @property(nonatomic, strong) NSString *status;
44
+
45
+ @end
46
+
47
+
48
+
49
+ @implementation AVPlayerItem
50
+
51
+ @end
52
+
53
+
54
+
55
+
56
+
57
+ @interface ViewController ()
58
+
59
+
60
+
61
+ @property(nonatomic, strong) NSMutableArray *avPlayerItems;
62
+
63
+ @property(nonatomic, strong) NSMutableArray *playLists;
64
+
65
+
66
+
67
+ @end
68
+
69
+
70
+
71
+ @implementation ViewController
72
+
73
+
74
+
75
+ - (void)viewDidLoad {
76
+
77
+ [super viewDidLoad];
78
+
79
+
80
+
81
+ // AVPlayerItemの配列とPlaylistの配列生成
82
+
83
+ self.avPlayerItems = [NSMutableArray array];
84
+
85
+ self.playLists = [NSMutableArray array];
86
+
87
+ for (int i = 0; i < 10; i++) {
88
+
89
+ AVPlayerItem *avPlayerItem = [[AVPlayerItem alloc] init];
90
+
91
+ [self.avPlayerItems addObject:avPlayerItem];
92
+
93
+ NSString *playList = [NSString stringWithFormat:@"Title%02d",i];
94
+
95
+ [self.playLists addObject:playList];
96
+
97
+ }
98
+
99
+ // オブザーバー設定
100
+
101
+ for (int i = 0; i < 10; i++) {
102
+
103
+ AVPlayerItem *avPlayerItem = self.avPlayerItems[i];
104
+
105
+ [avPlayerItem addObserver:self
106
+
107
+ forKeyPath:@"status"
108
+
109
+ options:NSKeyValueObservingOptionInitial
110
+
111
+ context:nil];
112
+
113
+ }
114
+
115
+
116
+
117
+ // 再生中の曲が切り替わるのをタイマーで擬似
118
+
119
+ [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(playNext) userInfo:nil repeats:true];
120
+
121
+
122
+
123
+ }
124
+
125
+
126
+
127
+ -(void)playNext {
128
+
129
+ static int index = 0;
130
+
131
+ AVPlayerItem *avPlayerItem = self.avPlayerItems[index];
132
+
133
+ avPlayerItem.status = @"ready";
134
+
135
+ index++;
136
+
137
+ index %= self.avPlayerItems.count;
138
+
139
+ }
140
+
141
+
142
+
143
+ // 再生中の曲が変わった時にタイトルを表示
144
+
145
+ -(void)observeValueForKeyPath:(NSString *)keyPath
146
+
147
+ ofObject:(id)object
148
+
149
+ change:(NSDictionary *)change
150
+
151
+ context:(void *)context {
152
+
153
+ if ([NSStringFromClass([object class]) isEqualToString:@"AVPlayerItem"]) {
154
+
155
+ if ([keyPath isEqualToString:@"status"]) {
156
+
157
+ AVPlayerItem *objItemNow = object;
158
+
159
+ NSUInteger index = [self.avPlayerItems indexOfObject:objItemNow];
160
+
161
+ if (index != NSNotFound) {
162
+
163
+ NSLog(@"Now Playing title: %@",self.playLists[index]);
164
+
165
+ } else {
166
+
167
+ NSLog(@"AVPlayerItem Not Found");
168
+
169
+ }
170
+
171
+ }
172
+
173
+ }
174
+
175
+ }
176
+
177
+ @end
178
+
179
+ ```
180
+
181
+