tutorial que español data ios objective-c core-data nsmanagedobject

ios - que - core data tutorial swift 4



Con CoreData, si tengo una propiedad @dynamic, ¿puedo anular su getter al igual que @synthesized?(Instanciación lenta) (2)

Ver documentación sobre el uso de primitiveValueForKey:

básicamente:

@dynamic name; - (NSString *)name { [self willAccessValueForKey:@"name"]; NSString *myName = [self primitiveName]; [self didAccessValueForKey:@"name"]; return myName; } - (void)setName:(NSString *)newName { [self willChangeValueForKey:@"name"]; [self setPrimitiveName:newName]; [self didChangeValueForKey:@"name"]; }

Usando CoreData, creé una entidad, luego la subclasé en su propio archivo, donde tiene @propertys, luego tiene las partes @dynamic en el archivo .m.

Cuando quiero que algo tenga un cierto valor si nunca se ha establecido, siempre utilizo la instanciación lenta, de la siguiente manera:

- (NSString *)preview { if ([self.body length] < 200) { _preview = self.body; } else { _preview = [self.body substringWithRange:NSMakeRange(0, 200)]; } return _preview; }

Pero, ¿cómo hago esto con las propiedades @dinámicas? Si hago lo mismo, dice que _preview es una propiedad no declarada, pero está en el archivo .h. ¿Qué hago diferente a la creación de instancias perezosas?


Un método estándar es definir la preview como un atributo transitorio en el modelo de Datos básicos (para que el valor no se almacene realmente en la base de datos) e implementar un método getter personalizado. En tu caso, se vería así:

- (NSString *)preview { [self willAccessValueForKey:@"preview"]; NSString *preview = [self primitiveValueForKey:@"preview"]; [self didAccessValueForKey:@"preview"]; if (preview == nil) { if ([self.body length] < 200) { preview = self.body; } else { preview = [self.body substringWithRange:NSMakeRange(0, 200)]; } [self setPrimitiveValue:preview forKey:@"preview"]; } return preview; }

(Puede proporcionar métodos getter y setter personalizados para propiedades @dinámicas. Sin embargo, las propiedades de los datos centrales no están respaldadas simplemente por variables de instancia. Esa es la razón por la que no puede acceder a _preview ).

Si necesita que la preview se vuelva a calcular si el atributo body cambia, entonces también debe implementar un método setter personalizado para body que vuelva a establecer la preview en nil .

Para obtener más información, lea Atributos persistentes no estándar en la "Guía de programación de datos básicos".

Actualización: la versión actual de la Guía de programación de datos básicos ya no contiene ese capítulo. Puede encontrar una versión archivada de Way Back Machine . Por supuesto, esto tiene que tomarse con un grano de sal ya que ya no forma parte de la documentación oficial.