核心数据 - 遍历 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 的属性的主要内容,如果未能解决你的问题,请参考以下文章

是不是不能复制一个核心数据NSManagedObject?

核心数据 NSManagedObject 更改

核心数据 - NSManagedObject(有关系)到 JSON

核心数据 NSManagedObject:最大属性数?

将 NSManagedObject 更新为核心数据

多线程核心数据 - NSManagedObject 无效