2011-12-11 13 views
12

Soy un novato en los datos básicos, así que aquí va.Datos principales: iteración a través de los atributos de un NSManagedObject

Tengo un objeto de datos básicos, por ejemplo, un alumno.

El estudiante tiene atributos melena, como nombre, edad, fecha de nacimiento, dirección, y así sucesivamente.

Ahora necesito mostrar todos estos atributos en una vista de tabla.

¿Hay alguna forma fácil de recorrer el estudiante objeto? ¿O debo convertir los datos en algún tipo de diccionario?

Si necesito para convertirlo en un diccionario es algún tipo de apoyo para ello? O tengo que escribir la función yo mismo.

Muchas gracias por su ayuda, Stephen

Respuesta

22

Aquí está una manera muy simple para iterar sobre una NSManagedObject:

NSEntityDescription *entity = [myManagedObject entity]; 
NSDictionary *attributes = [entity attributesByName]; 
for (NSString *attribute in attributes) { 
    id value = [myManagedObject valueForKey: attribute]; 
    NSLog(@"attribute %@ = %@", attribute, value); 
} 

Las pistas de cómo hacer esto (además de muchas más) proviene de Ole Bergmann blog: http://oleb.net/blog/2011/05/inspecting-core-data-attributes/

+0

¿hay alguna manera puedo hacer el viceversa de arriba es decir que debería ser capaz de ahorrar algo de valor utilizando [NSManagedObject setObjectForkey: somekey]? – pankaj

13

Si usted es como yo, y está tratando de resolver este problema en Swift aquí es cómo lo hice.

SWIFT 3:

let request:NSFetchRequest<ENTITY_NAME> 
if #available(iOS 10.0, *){ 
    request = ENTITY_NAME.fetchRequest() as! NSFetchRequest<ENTITY_NAME> 
}else{ 
    request = NSFetchRequest<ENTITY_NAME>(entityName: "ENTITY_NAME") 
} 

do{ 
    let entities = try YOUR_MOC.fetch(request) 
    for item in entities{ 
     for key in item.entity.attributesByName.keys{ 
      let value: Any? = item.value(forKey: key) 
      print("\(key) = \(value)") 
     } 
    } 
}catch{ 

} 

Swift 2:

let request = NSFetchRequest(entityName: "ENTITY_NAME") 
    do{ 
     let entities = try YOUR_MOC.executeFetchRequest(request) as! [YOUR_ENTITY] 
     for item in entities{ 
      for key in item.entity.attributesByName.keys{ 
       let value: AnyObject? = item.valueForKey(key) 
       print("\(key) = \(value)") 
      } 

     } 
    }catch{ 

    } 

Si desea obtener entidades relación de clave/valor, así, entonces debería usar propertiesByName en lugar de attributesByName así:

SWIFT 3:

for key in item.entity.propertiesByName.keys{ 
    let value: Any? = item.value(forKey: key) 
    print("\(key) = \(value)") 
} 

SWIFT 2:

for key in item.entity.propertiesByName.keys{ 
    let value: AnyObject? = item.valueForKey(key) 
    print("\(key) = \(value)") 
} 

Sólo recuerde que tener cuidado con el valor ya que es un NSManagedObject.

Cuestiones relacionadas