Crear file en el directory de la biblioteca en el iphone

Estoy intentando crear files en el subdirectory dentro de mi aplicación Biblioteca dir. En primer lugar, estoy obteniendo un path a la biblioteca así:

- (NSURL*) getLibraryDirectory { NSFileManager* manager = [NSFileManager defaultManager]; NSArray* paths = [manager URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask]; if ([paths count] > 0) { return [paths objectAtIndex:0]; } return nil; } 

Luego creo la subcarpeta usando este código:

 - (NSURL*) getDirectory:(NSString*)subdirName { NSFileManager* shanetworkingFM = [NSFileManager defaultManager]; NSURL* libraryDirectory = [self getLibraryDirectory]; if (libraryDirectory) { NSURL* subdir = [libraryDirectory URLByAppendingPathComponent:subdirName isDirectory:YES]; if (![shanetworkingFM fileExistsAtPath:[subdir absoluteString] isDirectory:YES]) { NSError* error; if ([shanetworkingFM createDirectoryAtURL:subdir withIntermediateDirectories:YES attributes:nil error:&error]) { return subdir; } else { NSLog(@"Error occunetworking while trying to create subdirectory \"%@\". Code - %d, desc - %@", subdirName, [error code], [error localizedDescription]); } } } return nil; } 

y lo último que estoy tratando de hacer es crear un file en esta carpeta así:

 NSString* filePath = [[self getDirectory:DIR_COMMANDS] absoluteString]; if (filePath) { filePath = [filePath stringByAppendingPathComponent:@"test_file.tst"]; NSFileManager* manager = [NSFileManager defaultManager]; if ([manager createFileAtPath:filePath contents:[[NSData alloc] initWithBytes:[[@"string" dataUsingEncoding:NSUTF16LittleEndianStringEncoding] bytes] length:12] attributes:nil]) { NSLog(@"YES"); } else { NSLog(@"NO"); } } 

Pero desafortunadamente estoy recibiendo "NO" cada vez y no puedo entender por qué.

Para get una ruta desde una URL de file, debe usar la path lugar de absoluteString .

 NSString *filePath = [[self getDirectory:DIR_COMMANDS] path]; 

Nota al getLibraryDirectory : debe adoptar el estilo de nomenclatura de Cocoa para los methods: libraryDirectory lugar de getLibraryDirectory , o incluso mejor: libraryDirectoryURL . El prefijo get solo se usa si los valores de retorno se pasan por reference.

Además: su uso de fileExistsAtPath:isDirectory: es incorrecto. El parámetro BOOL se pasa por reference:

 BOOL isDir; if ([shanetworkingFM fileExistsAtPath:[subdir path] isDirectory:&isDir]) { if (! isDir) { NSLog(@"There's a plain file at my path"); return nil; } }