I am a noob at core data, so here goes.
I have a core data object, for example student.
The student has mane attributes, like name, age, dob, address, and so on.
Now I need to display all these attributes into a table view.
Is there any easy way to iterate through the object student? Or do I have to convert the data into some type of dictionary?
If I need to convert it to a dictionary is there any support for it? Or do I have to write the function my self.
Many thanks for your help, Stephen
Here's a very simple way to iterate over an NSManagedObject:
NSEntityDescription *entity = [myManagedObject entity];
NSDictionary *attributes = [entity attributesByName];
for (NSString *attribute in attributes) {
id value = [myManagedObject valueForKey: attribute];
NSLog(@"attribute %@ = %@", attribute, value);
}
The clues for how to do this (plus lots more) comes from Ole Bergmann's blog: http://oleb.net/blog/2011/05/inspecting-core-data-attributes/
If you are like me and are trying to solve this problem in Swift here is how I did it.
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{
}
If you want to get relationship entities key/values as well then you should use propertiesByName
instead of attributesByName
like so:
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)")
}
Just remember to be careful with the value since it is an NSManagedObject.
来源:https://stackoverflow.com/questions/8463793/core-data-iterating-through-the-attributes-of-a-nsmanagedobject