0

私は問題を抱えています

NSInvalidArgumentExceptionnil文字列パラメーター(AudioFileCreateWithURLを使用しようとした場合)

問題は、fileURLがNSLog正しく出力されることです。これが正しい形式だと思います。

file://localhost/Users/me/Library/Application%20Support/iPhone%20Simulator/6.0/Applications/1A617C0D-90CC-465C-9108-ECBCF85F075C/Documents/recording.wav

__bridge変換が問題を引き起こしているのではないかと思います。

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                         NSUserDomainMask, YES);
    NSString* docDir = [paths objectAtIndex:0];
    NSString* file = [docDir stringByAppendingString:@"/recording.wav"];
    NSURL *fileURL = [NSURL fileURLWithPath:file];
    NSLog(@"%@", fileURL);
    OSStatus audioErr = noErr;
    audioErr = AudioFileCreateWithURL( (__bridge CFURLRef)fileURL, kAudioFileWAVEType, &asbd, kAudioFileFlags_EraseFile, &audioFile);

ARCを使用しています。私もこれを試しました:

audioErr = AudioFileCreateWithURL( (CFURLRef)CFBridgingRetain(fileURL), kAudioFileWAVEType, &asbd, kAudioFileFlags_EraseFile, &audioFile);

同じ例外が発生しました。

4

1 に答える 1

2

http://lists.apple.com/archives/coreaudio-api/2010/Aug/msg00210.htmlを見たことがありますか?彼らはCFStringRefそれを機能させるために使用しました。

// We have to encode spaces before sending it to CFURLCreateWithString. See CFURLCreateWithString returns NULL article http://markmail.org/message/5ugub2dvdaausdvf
    CFStringRef fileName = (CFStringRef) recordedFile; 
    CFStringRef fileNameEscaped = CFURLCreateStringByAddingPercentEscapes(NULL, fileName, NULL, NULL, kCFStringEncodingUTF8); 

    // Create the URL
    self.url = "" (CFStringRef)fileNameEscaped, NULL);    
    CHECK_NIL(url);

    // Create audio file
    OSStatus status = AudioFileCreateWithURL(url, kAudioFileWAVEType, &format, kAudioFileFlags_EraseFile, &audioFile);
    NSAssert(status == noErr, @"AudioFileCreateWithURL fails");
于 2012-12-12T20:29:18.803 に答える