gpt4 book ai didi

objective-c - Core Data 中对多关系的属性声明

转载 作者:太空狗 更新时间:2023-10-30 03:27:09 24 4
gpt4 key购买 nike

我有一个使用 Core Data 编写的应用程序。我有 2 个具有一对多关系的实体。我已经为他们两个创建了 NSManagedObject 的子类。一侧的实体称为播放列表,另一侧称为歌曲。

播放列表界面:

@interface VBPlaylist : NSManagedObject {
}

@property (readwrite, copy) NSString *name;

@end

播放列表的实现:

@implementation VBPlaylist

@dynamic name;

@end

我认为我应该有另一个属性来指示播放列表类下的歌曲。我找不到任何显示写为属性的多对多关系的示例代码。你是怎么做到的?

最佳答案

一对一关系被 Core Data 建模为对象引用。因此,从实体 Bar 到实体 Baz 的一对一关系(假设 Baz 由类 Baz 实现)会是

@interface Bar : NSManagedObject {
}

@property (readwrite,nonatomic) Baz * toBaz;

@end

对多关系被建模为一个可变的集合属性(虽然不是作为一个NSMutableSet)。假设从 BarBaz 的一对多关系称为 manyBazz:

@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 接口(interface)来操纵 manyBazz 关系,你应该调用 -mutableSetValueForKey:@"manyBazz" 来为manyBazz 关系。

在 Leopard (OS X 10.5) 及更高版本上,所有适当的方法都是由 Core Data 框架在运行时自动生成的,即使您没有显式声明或实现它们(当然,您会收到编译器警告如果您尝试使用它们而不在头文件中声明它们)。因此你不需要继承

获得正确声明和实现的最简单方法是在数据建模器中选择属性,然后从“设计->数据模型”菜单中选择“将 Objective-C 2.0 方法声明复制到剪贴板”,将其粘贴到您的实现类 .h 文件。当然,你必须保持你的 .h 和模型同步......因此强烈推荐 rentzsch 的精彩 MO Generator ,一个将从您的数据模型自动生成(并重新生成)NSManagedObject 子类的工具。

关于objective-c - Core Data 中对多关系的属性声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/849942/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com