programar parse para docs desde descargar apple ios swift core-data parse.com pfrelation

ios - docs - Declarar una propiedad @NSManaged de solo lectura en Swift para la relación PF de Parse



programar en ios desde windows (3)

Estoy usando la tienda de objetos Parse en mi aplicación iOS y he creado una subclase personalizada para mi objeto Parse, que se parece a esto:

class MyThing: PFObject, PFSubclassing { // ...PFSubclassing protocol... @NSManaged var name: String @NSManaged var somethingElse: String @NSManaged var relatedThings: PFRelation }

La propiedad relatedThings funciona: puedo buscar los objetos relacionados desde la tienda. Sin embargo, sigo recibiendo esta advertencia de Parse:

[Warning]: PFRelation properties are always readonly, but MyApp.MyThing.relatedThings was declared otherwise.

En Objective-C, podría haber marcado fácilmente esa propiedad como de solo lectura, pero no estoy seguro de cómo hacer eso en Swift para silenciar la advertencia.

No se let uso de let lugar de var en combinación con @NSManaged .

Agregar private(set) tampoco tiene efecto:

@NSManaged private(set) var relatedThings: PFRelation

Entonces, ¿cómo espera Parse que declare la propiedad de la relación?


A continuación, le mostramos cómo crearía una propiedad de Datos básicos de solo lectura con Swift. No sé si esto es lo que Parse está buscando, pero es cómo funcionarían las cosas en Swift.

Aunque Xcode genera subclases NSManagedObject con @NSManaged en los atributos, en realidad no es necesario. Está bien reemplazar los atributos @NSManaged con propiedades equivalentes calculadas de Swift que usan @NSManaged primitivos de Core Data para obtener / establecer valores de propiedad. Haría que la propiedad fuera efectivamente de solo lectura al no incluir un colocador.

Eso significaría reemplazar su declaración existente relacionada con relatedThings por algo como esto:

var relatedThings : PFRelation? { get { self.willAccessValueForKey("relatedThings") let things = self.primitiveValueForKey("relatedThings") as? PFRelation self.didAccessValueForKey("relatedThings") return things } }

Este código de get funcionará igual que si estuvieras usando @NSManaged . Pero al no tener un set , la propiedad es de solo lectura.


Ahora deberías usar:

var relatedThings: PFRelation! { return relationForKey("relatedThings") }


La respuesta de Tom no funcionó para mí, ya que PFObject no es una subclase de NSManagedObject , por lo que no implementa los willAccessValueForKey , primitiveValueForKey y didAccessValueForKey .

Sin embargo, usar el propio método objectForKey es la solución equivalente correcta:

var relatedThings: PFRelation! { return objectForKey("relatedThings") as? PFRelation }

Aún necesita forzar la PFRelation del valor que el método devuelve a PFRelation o, según la versión de Tom, convertir el tipo de propiedad en un opcional.