Ios 错误代码1886681407 AudioFileGetProperty给出了什么?

Ios 错误代码1886681407 AudioFileGetProperty给出了什么?,ios,audio,error-handling,Ios,Audio,Error Handling,我想得到mp3文件中的相册图片,这是我代码的一部分 //the Chinese is music name NSURL *fileURL = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"安和桥" ofType:@"mp3"]]; AudioFileTypeID fileTypeHint = kAudioFileMP3Type; AudioFileID fileID = nil;

我想得到mp3文件中的相册图片,这是我代码的一部分

    //the Chinese is music name 
    NSURL *fileURL = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"安和桥" ofType:@"mp3"]];
    AudioFileTypeID fileTypeHint = kAudioFileMP3Type;

    AudioFileID fileID = nil;
    OSStatus err = noErr;

    err = AudioFileOpenURL((__bridge CFURLRef)fileURL, kAudioFileReadPermission, 0, &fileID);

    UInt32 id3DataSize = 0;
    err = AudioFileGetPropertyInfo(fileID, kAudioFilePropertyID3Tag, &id3DataSize, NULL);
    NSDictionary *piDict = nil;
    UInt32 piDataSize = sizeof(piDict);
    err = AudioFileGetProperty(fileID, kAudioFilePropertyInfoDictionary, &piDataSize, &piDict);
    CFDataRef AlbumPic = nil;
    UInt32 picDataSize = sizeof(picDataSize);
    err = AudioFileGetProperty(fileID, kAudioFilePropertyAlbumArtwork, &picDataSize, &AlbumPic);
    NSError *error = [NSError errorWithDomain:NSOSStatusErrorDomain code:err userInfo:nil];
    NSLog(@"Error: %@", [error description]);
    NSData *imgdata = (__bridge NSData *)AlbumPic
我可以正确获取相册名称,但图像数据为零。我打印了错误信息

2014-09-09 20:07:05.129 Music_Player[2792:60b] Error: Error Domain=NSOSStatusErrorDomain Code=1886681407 "The operation couldn’t be completed. (OSStatus error 1886681407.)"
在另一个问题中,有人说这可能是许可问题,但它是set属性,然而,我得到了属性,所以我认为这不可能是那个原因。但我真的不知道为什么?

有时,使用AudioFile无法从音频文件中获取所有信息。改用avurlast

- (void)getAlbumArtworkInfo
{
   NSURL *fileUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"abc" ofType:@"mp3"]];
   AVURLAsset *avURLAsset = [AVURLAsset URLAssetWithURL:fileUrl options:nil];
   for (NSString *format in [avURLAsset availableMetadataFormats]) {
      for (AVMetadataItem *metadataItem in [avURLAsset metadataForFormat:format]) {
          if ([metadataItem.commonKey isEqualToString:@"artwork"]) {
              UIImage *artImageInMp3 = [UIImage imageWithData:[(NSDictionary*)metadataItem.value objectForKey:@"data"]];
              NSLog(@"artImageInMp3 %@",artImageInMp3);
              break;
          }
      }
   }
}

它就像你说的那样工作,但我还是不太清楚,通常我们使用这个方法AudioFile来获得什么信息?使用AudioFile你通常可以获得诸如标题、艺术家、持续时间和专辑等信息。使用AVURLAsset,我可以获得所有这些信息?有时使用AVURLAsset你无法获得ID3信息,你可以查看这些信息