2011-04-21 75 views
2

我正在使用核心数据并且有一个叫做Person(它是Core Data中的实体)的NSManagedObject的子类。 Person对象具有多个属性(例如firstName,lastName等)和关系(例如friends,coWorkers)。其中一些属性是可选的,而其他属性是强制性的。确定NSManagedObject属性是否可选

给定Person对象如何有效地确定特定属性或关系是可选还是强制?

我想尽量避免必须通过Person对象的每个属性进行某种低效的循环,因为我需要经常调用代码,所以类似于以下伪代码的内容将是完美的:

if ([[aPerson getProperty:@"firstName"] isOptional]) { 

    // do stuff 

} 

...但我不确定它是否可以简单地完成。上面的伪代码也只会检查属性,所以我猜测其他的东西需要在被检查的属性是关系的情况下完成。

我意识到,做一个循环并将所有强制属性的名称存储在数组中可能更有效(然后检查该数组是否存在属性名称),这就是我在做的这一刻,但不幸的是,它并没有真正与我的代码结构一起工作(因此需要更多的“按需”方法)。

任何帮助,将不胜感激:)

+0

我认为你是管理对象混乱实体写一个函数。 “可选”仅是实体的属性。这是在托管对象模型文件中定义的,并且一旦上下文分配给它就不能更改。如果实体具有可选关系,那么用该实体初始化的所有被管理对象都具有该可选关系,并且永远不会改变。您无需检查托管对象是否存在可选关系,并且您应该知道模型中的关系。 – TechZen 2011-04-21 17:38:34

回答

6

你可以在你的基地子

NSDictionary *d = [[self entity] attributesByName]; 
NSAttributeDescription *attr = (NSAttributeDescription *)[d objectForKey:@"test"]; 
BOOL isopt = [attr isOptional]; 
+0

太棒了。谢谢埃利亚斯!我在NSManagedObject上做了这个类,并且它工作得很棒:) – Skoota 2011-04-21 12:42:57

+0

+1这个方法可行,但是毫无意义。 (请参阅上面的我的评论。)您从不需要检查特定托管对象关系的配置,因为使用同一个实体初始化的所有对象都具有完全相同的关系配置。 – TechZen 2011-04-21 17:40:03

相关问题