2010-07-23 9 views
14

No pude obtener ninguna respuesta sobre mi pregunta anterior (relacionada), por lo que me pregunto si una pequeña paráfrasis será de alguna ayuda.NSKeyedUnarchiver: ¿borrar datos decodificados?

Estoy codificando algunos objetos complejos con NSKeyedArchiver y guardándolos en el disco. Por ejemplo, algo así como -

Class member { 
    int *id; 
    NSString *name; 
    NSMutableArray *array; 
    TempClass *object; 
} 

La funcionalidad que estoy tratando de construir es para que el usuario sea capaz de guardar su trabajo, digamos, mientras que la creación de un nuevo miembro y volver a ella más tarde. Cuando el usuario finaliza, hace clic en publicar y los datos se transmitirán a un servicio web. De lo contrario, simplemente hace clic en guardar y abandona la pantalla y los datos se conservan para que la aplicación pueda reanudarse desde ese momento cuando el usuario regrese. Ahora, una vez que he publicado los datos en el servicio web, ya no quiero guardar los datos en el disco y realmente no puedo encontrar la manera de eliminarlos.

Ahora, mis clases de codificación y descodificación están funcionando bien. Puedo usar NSKeyedArchiver para guardar los datos en el disco y recuperarlos usando NSKeyedUnarchiver. Pero, mi pregunta es, ¿cómo puedo eliminar los datos que ya no necesito? ¿Debo eliminar manualmente el archivo en el disco? ¿Hay alguna manera de hacer que NSKeyedUnarchiver elimine los datos que está devolviendo?

Gracias,
Teja.

Respuesta

18

Una forma muy sencilla de ser borrada mediante programación una vez que han publicado los datos:

- (BOOL) deleteFile:(NSString *) pathOfFileToDelete error:(NSError *)err { 
    BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath: pathOfFileToDelete]; 
    if(exists) { 
     [[NSFileManager defaultManager]removeItemAtPath: pathOfFileToDelete error:err]; 
    } 
    return exists; 
} 
+1

Gracias. Pero, ¿cómo obtengo el nombre del archivo? Si archivo varios objetos, ¿se guardarán como archivos múltiples? –

+0

Bien, se dio cuenta de que era una pregunta estúpida. No estoy reescribiendo mi código de guardado para escribir en un archivo diferente para cada archivo que creo. Entonces puedo eliminarlos cuando quiera. –

2

para SWIFT 2.0:

do { 
    try NSFileManager.defaultManager().removeItemAtPath("Your_PATH") 
} catch { 

} 
5

para SWIFT 2.0:

func deleteFile(path: String) -> Bool{ 
    let exists = NSFileManager.defaultManager().fileExistsAtPath(path) 
    if exists { 
     do { 
      try NSFileManager.defaultManager().removeItemAtPath(path) 
     }catch let error as NSError { 
      print("error: \(error.localizedDescription)") 
      return false 
     } 
    } 
    return exists 
} 
2

Un ejemplo de Swift3:

do { 
try FileManager.default.removeItem(atPath: path) 
} catch { 
// catch potential error 
} 
Cuestiones relacionadas