我不明白问题出在什么地方

 - (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的类型,或分配mutableCopyavItem.asset.metadata[titleIndex]

10-08 05:35