核心数据 – 遍历NSManagedObject的属性
我是核心数据的noob,所以在这里。
我有一个核心数据对象,例如学生。
学生有鬃毛属性,如姓名,年龄,dob,地址等。
现在我需要显示所有这些属性到一个表格视图。
有没有简单的方法来遍历对象的学生? 或者我必须将数据转换成某种types的字典?
如果我需要将其转换为字典,是否有任何支持? 或者我必须写我自己的function。
非常感谢您的帮助,Stephen
这是一个非常简单的方法来遍历一个NSManagedObject:
NSEntityDescription *entity = [myManagedObject entity]; NSDictionary *attributes = [entity attributesByName]; for (NSString *attribute in attributes) { id value = [myManagedObject valueForKey: attribute]; NSLog(@"attribute %@ = %@", attribute, value); }
如何做到这一点(以及更多的)的线索来自奥贝格曼的博客: http : //oleb.net/blog/2011/05/inspecting-core-data-attributes/
如果你像我一样,并试图解决这个问题在Swift这里是我是如何做到的。
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{ }
如果你想获得关系实体的键/值,那么你应该使用propertiesByName
而不是像这样的attributesByName
:
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)") }
只要记住要小心,因为它是一个NSManagedObject。