iOS核心数据一对多关系NSSET

Posted

技术标签:

【中文标题】iOS核心数据一对多关系NSSET【英文标题】:iOS core data one to many relationship NSSET 【发布时间】:2013-10-28 12:22:09 【问题描述】:

我只是想知道是否可以使用自定义类而不是 NSSET 来处理核心数据中的一对多关系?

例如,假设我们有:

@interface Company : NSManagedObject

@property (nonatomic, retain) NSString *companyId;
@property (nonatomic, retain) NSString *companyName;
@property (nonatomic, retain) NSSET *employees;

@end

我想创建一个名为员工的类,例如:

@interface Employees : NSSet

- (void) someCustomMethod;

@end

然后将公司员工的申报改为

@property (nonatomic, retain) Employees *employees;

虽然它构建成功,但当我尝试访问员工的 someCustomMethod 时会引发异常。可能是因为该对象已创建为 NSSET 而不是Employees。

所以我的问题是,我可以这样做吗?如果可以,我如何让员工被创建为员工而不是 NSSET。

谢谢,

AJ

【问题讨论】:

【参考方案1】:

我认为这是不可能的。 Core Data 访问器方法是动态生成的 在运行时,NSSet 用于表示一对多关系。

另请注意,NSSet documentation 不鼓励您进行子类化:

应该很少需要子类化。如果您需要定制 行为,通常最好考虑组合而不是 子类化。

及以后:

如果您要添加的行为是对现有行为的补充 类,您可以在NSSet 上写一个类别。但是请记住, 此类别将对NSSet 的所有实例有效 您使用,这可能会产生意想不到的后果。或者, 您可以使用组合来实现所需的行为。

在您的情况下,Company 上的类别方法对所有 employees 进行操作 可能是解决方法。

【讨论】:

以上是关于iOS核心数据一对多关系NSSET的主要内容,如果未能解决你的问题,请参考以下文章

IOS/Objective-C/CoreData:以一对多关系编辑NSSet

获取核心数据对象,其中一对多关系包含集合中的所有对象

一对多关系核心数据只保存最后一个对象。其他人不见了

使用 NSSortDescriptor 对一对多关系的 NSSet 类型的数据进行排序

将核心数据对象设置为 NSSet

CoreData 一对多关系。 NSSet 归属问题