【问题标题】:How To check if an attribute exists at runtime on a NSManagedObject subclass如何在运行时检查 NSManagedObject 子类上的属性是否存在
【发布时间】:2012-01-14 13:19:36
【问题描述】:

如何在运行时检查特定实体的属性是否存在。我将实现一个名为 dateAddStamp 的属性,但并非所有实体都具有此属性。这个类将作为其他实体类的基础......所以我想在运行时检查我是否可以调用 [self setPrimitiveValue:xxx forKey:xxx]...... 谢谢。

【问题讨论】:

    标签: cocoa-touch cocoa core-data


    【解决方案1】:
    BOOL hasFoo = [[myObject.entity propertiesByName] objectForKey:@"foo"] != nil;
    

    【讨论】:

      【解决方案2】:

      迅速

       let hasFoo =  myObject.entity.propertiesByName.keys.contains("foo")
      

      【讨论】:

        【解决方案3】:

        为了改进 omz 的答案,您还应该检查属性是否是属性(而不是名为 @"foo" 的关系):

            BOOL hasFoo = ( [[myObject.entity propertiesByName] objectForKey:@"foo"] != nil 
        && ([[[myObject.entity propertiesByName] objectForKey:key] isKindOfClass:[NSAttributeDescription class]]) )
        

        【讨论】:

          【解决方案4】:

          斯威夫特 3.2 使用包含键数组的检查:

          if managedObject.entity.attributeKeys.contains("yourKey") {
             let value = managedObject.value(forKey: "youreKey") as! ClassName)
          
          }
          

          或使用 if-let :

          if let data = managedObject.value(forKey: "youreKey") {
             let value = data as! ClassName
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-28
            • 2011-01-25
            • 1970-01-01
            相关资源
            最近更新 更多