我有一个使用Core Data编写的应用程序.我有两个具有一对多关系的实体.我已经为它们分类了NSManagedObject.单方面的实体称为播放列表,另一方称为歌曲.
播放列表的界面:
@interface VBPlaylist : NSManagedObject { } @property (readwrite,copy) NSString *name; @end
播放列表的实现:
@implementation VBPlaylist @dynamic name; @end
解决方法
核心数据将对象关系建模为对象引用.所以从实体吧到实体Baz(假设Baz由Baz类实现)是一个一对一的关系
@interface Bar : NSManagedObject { } @property (readwrite,nonatomic) Baz * toBaz; @end
许多关系被建模为可变集合属性(虽然不是NSMutableSet).假设从Bar到Baz的很多关系叫许多Bazz:
@interface Bar : NSManagedObject { } @property (retain) NSSet* manyBazz; @end // coalesce these into one @interface AnalysisRecord (CoreDataGeneratedAccessors) section @interface Bar (CoreDataGeneratedAccessors) - (void)addManyBazzObject:(Baz *)value; - (void)removeManyBazzObject:(Baz *)value; - (void)addManyBazz:(NSSet *)value; - (void)removeManyBazz:(NSSet *)value; @end
如果要使用NSMutableSet接口操作manyBazz关系,您应该调用-mutableSetValueForKey:@“manyBazz”,以获取许多与Bazz关系的KVO兼容代理.
在Leopard(OS X 10.5)及更高版本上,所有适用的方法都可以在运行时由Core Data框架自动生成,即使您没有明确声明或实现它们(当然,如果您尝试使用编译器警告)使用它们而不在头文件中声明它们).因此,您不需要子类
获取声明和实现权限的最简单的方法是选择数据建模器中的属性,并从“设计 – 数据模型”菜单中选择“复制Objective-C 2.0方法声明到剪贴板”,粘贴到实现类中.h文件.当然,你必须保持你的.h和模型是同步的…因此,一个衷心的建议,rentzsch的令人敬畏的MO Generator,一个工具,将自动生成(并重新生成)NSManagedObject子类从您的数据模型.