Estoy intentando guardar un archivo de texto sin formato para el directorio de Documentos en iOS 7. Aquí está mi código:

//Saving file
NSFileManager *fileManager = [[NSFileManager alloc] init];
NSArray *urls = [fileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];

NSString *url = [NSString stringWithFormat:@"%@", urls[0]];

NSString *someText = @"Random Text To Be Saved";
NSString *destination = [url stringByAppendingPathComponent:@"File.txt"];

NSError *error = nil;

BOOL succeeded = [someText writeToFile:destination atomically:YES encoding:NSUTF8StringEncoding error:&error];

if (succeeded) {
    NSLog(@"Success at: %@",destination);
} else {
    NSLog(@"Failed to store. Error: %@",error);
}

Aquí es el error que estoy recibiendo:

2013-10-13 16:09:13.848 SavingFileTest[13675:a0b] Failed to store. Error: Error Domain=NSCocoaErrorDomain Code=4 "The operation couldn’t be completed. (Cocoa error 4.)" UserInfo=0x1090895f0 {NSFilePath=file:/Users/Username/Library/Application%20Support/iPhone%20Simulator/7.0-64/Applications/F5DA3E33-80F7-439B-A9AF-E8C7FC4E1630/Documents/File.txt, NSUserStringVariant=Folder, NSUnderlyingError=0x10902aeb0 "The operation couldn’t be completed. No such file or directory"}

No puedo entender ¿por qué estoy recibiendo este error se ejecuta en el simulador. Esto funciona si uso el NSTemporaryDirectory().

  • ¿compruebe que existe el directorio? parece que el código válido
  • He escrito esto en el terminal: cd Library/Application Support y no me deja escribir el espacio correctamente para la Aplicación.
  • agregar comillas alrededor de la ruta de acceso
InformationsquelleAutor | 2013-10-13

3 Comentarios

  1. 53

    De Apple Xcode Plantilla:

    /**
     Returns the URL to the application's Documents directory.
     */
    - (NSURL *)applicationDocumentsDirectory {
        return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory 
             inDomains:NSUserDomainMask] lastObject];
    }

    Puede guardar como esto:

    NSString *path = [[self applicationDocumentsDirectory].path 
                           stringByAppendingPathComponent:@"fileName.txt"];
    [sampleText writeToFile:path atomically:YES
                           encoding:NSUTF8StringEncoding error:nil];
    • Gracias. Funcionó!
    • Me pregunto por qué el directorio de la aplicación debe ser el lastObject de la matriz de NSURL objetos?
    • La comodidad. El resultado esperado es una matriz con un solo elemento, por lo que puede utilizar [0] (que podría bloquearse si la matriz es de alguna manera el vacío), o, alternativamente, firstObject o lastObject (que no se bloquee pero simplemente volver nil).
    • En Swift: NSSearchPathForDirectoriesInDomains(.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).first as String
    • Coloque una barra «/» antes del nombre de archivo: NSString *path = [[auto applicationDocumentsDirectory].ruta stringByAppendingPathComponent:@»/fileName.txt»]; de lo Contrario no va a guardar el archivo en el directorio de Documentos.
  2. 2

    Mundi de la respuesta en Swift:

        let fileName = "/File Name.txt"
        let filePath = self.applicationDocumentsDirectory().path?.stringByAppendingString(fileName)
    
        do {
            try strFileContents.writeToFile(filePath!, atomically: true, encoding: NSUTF8StringEncoding)
            print(filePath)
        }
        catch {
            //error saving file
        }
    
    func applicationDocumentsDirectory() -> NSURL {
    
        return NSFileManager.defaultManager().URLsForDirectory(NSSearchPathDirectory.DocumentDirectory, inDomains: NSSearchPathDomainMask.UserDomainMask).last!
    }

Dejar respuesta

Please enter your comment!
Please enter your name here