【问题标题】:Core Data - Iterating through the attributes of a NSManagedObject核心数据 - 遍历 NSManagedObject 的属性
【发布时间】:2011-12-11 12:02:35
【问题描述】:

我是核心数据的菜鸟,所以就这样吧。

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

学生具有鬃毛属性,例如姓名、年龄、出生日期、地址等。

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

有没有什么简单的方法可以遍历对象 student?还是我必须将数据转换成某种类型的字典?

如果我需要将其转换为字典,是否有任何支持?还是我必须自己编写函数。

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

【问题讨论】:

    标签: ios core-data nsmanagedobject


    【解决方案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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-08
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多