加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 核心数据中多对多关系的属性声明

发布时间:2020-12-16 03:16:43 所属栏目:百科 来源:网络整理
导读:我有一个使用Core Data编写的应用程序.我有两个具有一对多关系的实体.我已经为它们分类了NSManagedObject.单方面的实体称为播放列表,另一方称为歌曲. 播放列表的界面: @interface VBPlaylist : NSManagedObject {}@property (readwrite,copy) NSString *nam
我有一个使用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子类从您的数据模型.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读