我不明白问题出在什么地方
- (NSString *)titleForAudioFileModel:(APAudioPlayerModel *)audioFileModel {
AVPlayerItem *avItem = [AVPlayerItem playerItemWithURL:[NSURL fileURLWithPath:audioFileModel.filePath]];
NSUInteger titleIndex = [avItem.asset.commonMetadata indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
AVMutableMetadataItem *metaItem = (AVMutableMetadataItem *)obj;
if ([metaItem.commonKey isEqualToString:AVMetadataCommonKeyTitle]) {
return YES;
}
return NO;
}];
if (titleIndex == NSNotFound) {
return @"";
}
AVMutableMetadataItem *item = avItem.asset.metadata[titleIndex];// Incompatible pointer types initializing 'AVMutableMetadataItem *' with an expression of type 'AVMetadataItem *'
return (NSString *)item.value;
}
先感谢您。
最佳答案
您尝试分配给您的item
变量的属性声明为:
@property(nonatomic, readonly) NSArray <AVMetadataItem *> *metadata
这意味着编译器期望数组中的每个项目都是
AVMetadataItem
类型。此类是AVMutableMetadataItem
的超类,您不能将对超类的引用分配给子类的变量。它以前可能起作用的原因是SDK和编译器并不总是支持泛型(属性声明中的
<AVMetadataItem *>
)。只要您不将item
视为可变,它就会一直有效。解决方法是更改
item
的类型,或分配mutableCopy
的avItem.asset.metadata[titleIndex]
。