核心数据 - 迭代NSManagedObject的属性

ste*_*hen 15 core-data nsmanagedobject ios

我是核心数据的菜鸟,所以这里.

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

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

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

是否有任何简单的方法来迭代对象学生?或者我必须将数据转换为某种类型的字典?

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

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

mpe*_*urn 25

这是迭代NSManagedObject的一种非常简单的方法:

NSEntityDescription *entity = [myManagedObject entity];
NSDictionary *attributes = [entity attributesByName];
for (NSString *attribute in attributes) {
    id value = [myManagedObject valueForKey: attribute];
    NSLog(@"attribute %@ = %@", attribute, value);
}
Run Code Online (Sandbox Code Playgroud)

关于如何做到这一点(以及更多)的线索来自Ole Bergmann的博客:http://oleb.net/blog/2011/05/inspecting-core-data-attributes/


boi*_*kan 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{

}
Run Code Online (Sandbox Code Playgroud)

斯威夫特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{

   }
Run Code Online (Sandbox Code Playgroud)

如果你想获得关系实体键/值,那么你应该使用propertiesByName而不是attributesByName像这样:

SWIFT 3:

for key in item.entity.propertiesByName.keys{
    let value: Any? = item.value(forKey: key)
    print("\(key) = \(value)")
}
Run Code Online (Sandbox Code Playgroud)

SWIFT 2:

for key in item.entity.propertiesByName.keys{
    let value: AnyObject? = item.valueForKey(key)
    print("\(key) = \(value)")
}
Run Code Online (Sandbox Code Playgroud)

请记住要小心该值,因为它是一个NSManagedObject.