我是核心数据的菜鸟,所以这里就是。
我有一个核心数据对象,例如student。
学生有鬃毛属性,如姓名,年龄,dob,地址等。
现在我需要将所有这些属性显示在表格视图中。
有没有简单的方法来迭代对象学生?或者我是否必须将数据转换为某种类型的字典?
如果我需要将其转换为字典,是否有任何支持?或者我必须自己编写函数。
非常感谢你的帮助, 斯蒂芬
答案 0 :(得分:25)
这是迭代NSManagedObject的一种非常简单的方法:
NSEntityDescription *entity = [myManagedObject entity];
NSDictionary *attributes = [entity attributesByName];
for (NSString *attribute in attributes) {
id value = [myManagedObject valueForKey: attribute];
NSLog(@"attribute %@ = %@", attribute, value);
}
如何做到这一点(以及更多)的线索来自Ole Bergmann的博客:http://oleb.net/blog/2011/05/inspecting-core-data-attributes/
答案 1 :(得分:17)
如果你像我一样,并试图在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{
}
斯威夫特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。