2011-12-11 175 views
12

我是核心数据的noob,所以在这里。核心数据 - 遍历NSManagedObject的属性

我有一个核心数据对象,例如学生。

学生有鬃毛属性,如姓名,年龄,dob,地址等。

现在我需要将所有这些属性显示到表格视图中。

是否有任何简单的方法来遍历对象的学生?还是必须将数据转换为某种类型的字典?

如果我需要将它转换为字典,是否有任何支持?或者我必须写自己的功能。

非常感谢您的帮助, 斯蒂芬

回答

22

这里是一个非常简单的方法来遍历一个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/

+0

有没有什么办法可以做到上述相反,即我应该能够使用[NSManagedObject setObjectForkey:somekey]保存一些值? – pankaj

13

如果你像我一样,并试图解决这个问题在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。