1

AVFoundation を使用して画面出力を記録しようとしています。最新バージョンの Mac (Mountain Lion) に移行した後、理由は不明ですが、動作しなくなりました。私はそれを機能させようとしてきましたが、これまでのところ実りはありません。startRecordingToOutputFileURL出力ファイルが既に存在する場合、AVFoundation メソッドが機能しないことはわかっています。そこで、NSFileManager宛先ファイルが存在するかどうか、書き込み可能かどうかを確認するために使用してみました。私のファイルマネージャーは、宛先ファイルが存在せず、書き込み不可に対応する値を常に返します。ファイルのアクセス許可を無駄に設定しようとしましたが、誰かが私の考えられる間違いに光を当てることができます:

dest = [[NSURL alloc] initFileURLWithPath:@"~/Desktop/myMovie.mov"];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSMutableDictionary *attributes = [[NSMutableDictionary alloc] init];
[attributes setObject:[NSNumber numberWithInt:777] forKey:NSFilePosixPermissions]; //I tried 511 too, no avail
[fileManager setAttributes:attributes ofItemAtPath:[dest path] error:nil]; 
if (![fileManager fileExistsAtPath:[dest path]]) {
     if ([fileManager isWritableFileAtPath:[dest path]]) {
            /* Starts recording to a given URL. */
         [captureMovieFileOutput startRecordingToOutputFileURL:dest recordingDelegate:self];
        }
        else{
            NSLog(@"File doesnot exist but is not writable"); //This is the message I get as result
        }

    }
    else
    {
        NSLog(@"File Exists...");
    }
4

1 に答える 1

2

展開されていないチルダは、Cocoaでは有効なパスではありません。'sに渡される文字列には、-stringByExpandingTildeInPath以上を使用する必要があります。-stringByStandardizingPathNSURL-initFileURLWithPath:

このため、NSFileManagerはisWritableFileAtPathに対してNOを返します。これは、無効なパスであるためです(したがって、書き込み可能ではありません)。これにより、NSLog()が起動されます。

コメントに基づいて更新:

パスがまだ無効であるため、NSURLが作成時にnilを返すことがあります(したがって、-pathを呼び出すとnilが返されます)。また、ドキュメントには-isWritableFileAtPathについて記載されています。「操作(ファイルのロードやディレクトリの作成など)を試行し、エラーをチェックして、それらのエラーを適切に処理する方が、先に理解するよりもはるかに優れています。操作が成功するかどうかの時間の。」

Peter Hoseyの提案を参考にして、ファイルへの書き込みを試みたときに呼び出しが失敗した場合はNSErrorを利用し、事前に把握しようとしないでください。

于 2012-12-28T16:53:50.977 に答える