2011-12-11 17 views
12

Sono un noob nei dati di base, quindi ecco qui.Dati principali - Iterazione degli attributi di NSManagedObject

Ho un oggetto dati di base, ad esempio studente.

Lo studente ha attributi di mane, come nome, età, dob, indirizzo e così via.

Ora ho bisogno di visualizzare tutti questi attributi in una vista tabella.

C'è un modo semplice per scorrere l'oggetto studente? O devo convertire i dati in qualche tipo di dizionario?

Se ho bisogno di convertirlo in un dizionario c'è qualche supporto? O devo scrivere la funzione da solo.

Molte grazie per il vostro aiuto, Stephen

risposta

22

Ecco un modo molto semplice per iterare su un NSManagedObject:

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

Gli indizi su come fare questo (più molto altro ancora) proviene da Ole Bergmann di blog: http://oleb.net/blog/2011/05/inspecting-core-data-attributes/

+0

c'è un modo per eseguire il vice versa di cui sopra dovrei essere in grado di salvare qualche valore usando [NSManagedObject setObjectForkey: somekey]? – pankaj

13

Se sei come me e stai provando a risolvere questo problema in Swift, ecco come l'ho fatto.

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{ 

    } 

Se si desidera ottenere entità relazione di chiave/valori e quindi si dovrebbe utilizzare propertiesByName invece di attributesByName in questo modo:

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)") 
} 

Basta ricordarsi di stare attenti con il valore in quanto si tratta di un NSManagedObject.

Problemi correlati