核心数据 - 遍历 NSManagedObject 的属性
Posted
技术标签:
【中文标题】核心数据 - 遍历 NSManagedObject 的属性【英文标题】:Core Data - Iterating through the attributes of a NSManagedObject 【发布时间】:2011-12-11 12:02:35 【问题描述】:我是核心数据的菜鸟,所以就这样吧。
我有一个核心数据对象,例如学生。
学生具有鬃毛属性,例如姓名、年龄、出生日期、地址等。
现在我需要在表格视图中显示所有这些属性。
有没有什么简单的方法可以遍历对象 student?还是我必须将数据转换成某种类型的字典?
如果我需要将其转换为字典,是否有任何支持?还是我必须自己编写函数。
非常感谢您的帮助, 斯蒂芬
【问题讨论】:
【参考方案1】:这是一个非常简单的迭代 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/
【讨论】:
有什么办法可以反之亦然,即我应该能够使用 [NSManagedObject setObjectForkey:somekey] 保存一些值? @pankaj 使用这个id value = [myManagedObject valueForKey: @"yourSpecificKeyInEntity"];
【参考方案2】:
如果你和我一样想在 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。
【讨论】:
以上是关于核心数据 - 遍历 NSManagedObject 的属性的主要内容,如果未能解决你的问题,请参考以下文章