¿Patrones iOS para crear objects antes de savelos?

Soy bastante nuevo en iOS y actualmente estoy diseñando la página "Crear un nuevo evento" para mi aplicación.

Alguna información:

  1. Un usuario puede hacer clic en crear un nuevo evento y luego presionar para cancelar la creación de este nuevo evento. (Estoy usando UINavigationController)
  2. Se puede adjuntar 1 video a un evento en particular.
  3. Un usuario puede crear un nuevo evento, grabar un video, y luego decide no seguirlo guardándolo (presionando hacia atrás)
  4. Cada evento debe generar un uuid. Este uuid es necesario para evitar la colisión de entidades entre diferentes clientes creando events y enviándolos al server.
  5. Cada video capturado se llama uuid .mov para almacenar en el sistema de files antes de que el evento se cargue en el server.

Viniendo de un background de carriles, estoy acostumbrado a hacer lo siguiente:

  1. Cuando el usuario hace clic en "Crear nueva página de evento", se crea un evento pero no se guarda en la database.
  2. El usuario luego ingresa attributes a la página y decide si él / ella quiere comprometerse
  3. Cuando se comprometen a tomar lugares, el evento se atribuye con la información proporcionada. El evento se guarda entonces.

Sin embargo, no creo que Core Data tenga una API que permita al desarrollador crear una entidad sin savelo. Actualmente, estoy haciendo algo como esto:

  1. Cuando el usuario visita la "página de creación de nuevos events", se crea un object vacío y se almacena en la database. La reference a la instancia de evento se pasa al controller de la página crear un nuevo evento.
  2. Cuando el usuario ha ingresado toda la información y ha grabado un video (el uuid se crea en awakeFromInsert y se establece durante 1), save simplemente está configurando la entidad con el atributo requerido.
  3. Si el usuario decide cancelar la creación de un evento, estoy comprobando si se presiona la cancelación. si es así, se eliminan tanto el evento como el file de video.

Código para verificar si se presiona Cancelar.

- (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; if (![[self.navigationController viewControllers] containsObject:self]) { 

Esto es un poco complicado para ser honesto. ¿Tienen una mejor sugerencia?

Realmente funciona como describiste Rails trabajando: los nuevos objects no se guardan en el almacén persistente hasta que los NSManagedObjectContext (a través del NSManagedObjectContext save: method de NSManagedObjectContext ).

Consulte la sección Creación y eliminación de objects gestionados de la Guía de progtwigción de datos básicos . Extractando …

Simplemente la creación de un object gestionado no hace que se guarde en una tienda persistente. El context de object gestionado actúa como un bloc de notas. Puede crear y registrar objects con él, hacer cambios en los objects y deshacer y rehacer los cambios que desee. Si realiza cambios en los objects gestionados asociados a un context determinado, esos cambios permanecen locales en ese context hasta que confirme los cambios enviando el context a un post de guardado. En ese momento, siempre que no haya errores de validation, los cambios se han comprometido con la tienda.