ファイルに永続性情報を保存する必要があるアプリを作成していますが、NSFileManager の createFileAtPath:contents:attributes: 関数のデバッグに問題があります。問題を以下のコードに減らしました。
NSFileManager *filemgr;
filemgr = [NSFileManager defaultManager];
NSString * fileName = @"newfile.txt";
NSArray *paths = NSSearchPathForDirectoriesInDomains
(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent: fileName];
NSLog(@"full path name: %@", filePath);
// check if file exists
if ([filemgr fileExistsAtPath: filePath] == YES){
NSLog(@"File exists");
}else {
NSLog (@"File not found, file will be created");
if (![filemgr createFileAtPath:filePath contents:nil attributes:nil]){
NSLog(@"Create file returned NO");
}
}
関数は NSError オブジェクトを取らないので、正確に false を返す理由を見つけるのに苦労しています。
私がここで見た他の例から、iOSでファイルを書き、デバイスでCoreAudioを使用してiOSで特定の長さの空の.m4aファイルをプログラムで作成する方法は? content パラメータと attributes パラメータの両方に nil を渡しても問題ありません。両方のパラメーターを指定してみましたが、同じ結果が得られました。
これはアクセス許可の問題である可能性があると考えていますが、以下のコードがディレクトリのアクセス許可を確認する正しい方法であるかどうかはわかりません。
if ([filemgr isWritableFileAtPath:documentsDirectory] == YES){
NSLog (@"File is readable and writable");
}