我的问题很简单。我在 CoreData 中有大约 10 个不同的实体,它们都具有相同的属性(名称、描述......)。要以这种方式访问这些属性:
MyEntity *entity=...;
MyEntity2 *entity2=...;
...
MyEntity10 *entity10=...;
[self myfunction:AnEntity];
在我将一个随机对象发送给一个函数之后
-(void)myfunction:(id)myentity
在这里我想使用一个可以访问实体属性的变量,无论它是类 MyEntity 还是 MyEntity2 中的王...问题是我做不到:
id myobject=myentity;
NSLog(@"%@", myobject.name);
如果有人有解决方案来避免测试对象的类别 :) 谢谢!
最佳答案
如果您有 10 个不同的实体,我认为是时候转向 NSManagedObject 子类了。然后您可以定义一个包含所有共享属性的协议(protocol),并声明您的 NSManagedObject 子类符合该协议(protocol)。然后你的电话就变成了
-(void)myfunction:(id<SharedAttributesProtocol>)myObject
{
NSLog(@"%@", myObject.name);
}
您提到“描述”是您的共享属性之一。 -description 方法已经定义,因此您可能想为该属性选择另一个名称。
为公共(public)属性使用父 NSEntity 的缺点是您最终会得到一个非常宽的表。该表具有所有公共(public)属性,但也具有每个子实体的所有不同属性。根据对象的大小,这将在 iOS 下影响性能,尽管在 OS X 上并没有那么糟糕。
关于ios - 使用多个 NSManagedObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14012745/