不兼容的指针类型初始化' AVMutableMetadataItem *'表达类型' AVMetadataItem *'?

时间:2015-11-16 14:14:34

标签: ios objective-c avaudioplayer

我无法理解问题出在什么之前

 - (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;
}

提前谢谢。

1 个答案:

答案 0 :(得分:1)

您尝试分配给wcslen变量的属性声明为:

item

这意味着编译器期望数组中的每个项都是@property(nonatomic, readonly) NSArray <AVMetadataItem *> *metadata 类型。此类是AVMetadataItem的超类,您不能将对超类的引用分配给子类的变量。

之前可能有用的原因是SDK和编译器并不总是支持泛型(属性声明中的AVMutableMetadataItem)。只要你没有将<AVMetadataItem *>视为可变,它就会奏效。

修复方法是更改​​item的类型,或指定item mutableCopy