No se llamará a NSManagedObject para un object no válido.

Tengo una class NSManagedObject con un atributo updatedOn . Tenía la esperanza de implementar la lógica para establecer su valor en el método willSave la class. Cuando intenté hacer esto, descubrí que willSave nunca fue llamado en mis instancias de esta class.

Después de algunas investigaciones, determiné que el método willSave no se llamaría para las instancias recién creadas, donde updatedOn no se inicializaba a ningún valor. Debido a que este atributo no se configuró como opcional, la validation falla y aparentemente el método willSave solo se llamará si la instancia es válida.

Mi pregunta es esta: ¿hay una buena práctica para hacer este tipo de cosas? ¿Debo hacer que el atributo updatedOn opcional para updatedOn ? ¿O debería implementar el método awakeFromInsert de mi class para establecer un valor inicial allí y luego sobrescribir ese valor cuando finalmente se llamará al método willSave ? ¿O hay algún enfoque más simple que tenga más sentido?

La documentation de willSave hace reference al uso del método para el sellado de time y, a pesar de mencionar algunas complicaciones en torno al cambio de los valores de propiedad y la recursion, no advierte específicamente contra este uso. Entonces supongo que, en base a ese hecho, podría considerarse un lugar razonable para poner esta funcionalidad.

Sin embargo, la documentation se refiere al uso de NSManagedObjectContextWillSaveNotification para calcular una indicación de date y hora común, por lo que tal vez esta sería una location alternativa para este trabajo. Requeriría la inspección manual de las collections updatedObjects y updatedObjects en managedObjectContext para ubicar los objects que necesitan sellar el time, pero en base a algunas testings rápidas, parece que se llama antes de los pasos de validation para que tenga la oportunidad de establecer la propiedad requerida aquí.

Si willSave seguir con willSave , supongo que tienes 3 opciones.

  • Una propiedad requerida con un valor pnetworkingeterminado especificado en su model.
  • Una propiedad requerida con la propiedad establecida en awakeFromInsert o algún otro punto adecuado.
  • Una propiedad opcional.

Creo que cualquiera de las opciones son opciones razonables, pero creo que si fuera yo, probablemente elegiría el NSManagedObjectContextWillSaveNotification simplemente por las complicaciones con el establecimiento de valores de propiedad en willSave.