hek*_*ran 9 macos cocoa core-data objective-c
我有一个使用Core Data编写的应用程序.我有2个具有一对多关系的实体.我为它们都分类了NSManagedObject.单侧的实体称为播放列表,另一侧称为Song.
播放列表的界面:
@interface VBPlaylist : NSManagedObject {
}
@property (readwrite, copy) NSString *name;
@end
Run Code Online (Sandbox Code Playgroud)
播放列表的实现:
@implementation VBPlaylist
@dynamic name;
@end
Run Code Online (Sandbox Code Playgroud)
我想我应该有另一个属性来指示播放列表类下的歌曲.我找不到任何示例代码来显示作为属性编写的多对多关系.你怎么做到这一点?
Bar*_*ark 18
一对一关系被Core Data建模为对象引用.因此,从实体Bar到实体的一对一关系Baz(假设Baz由类实现Baz)将是
@interface Bar : NSManagedObject {
}
@property (readwrite,nonatomic) Baz * toBaz;
@end
Run Code Online (Sandbox Code Playgroud)
多对多关系被建模为可变集属性(尽管不是一个NSMutableSet).假设从一对多的关系Bar,以Baz所谓的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
Run Code Online (Sandbox Code Playgroud)
如果要使用NSMutableSet接口来操作manyBazz关系,则应调用-mutableSetValueForKey:@"manyBazz"以获取与该manyBazz关系的KVO兼容代理.
在Leopard(OS X 10.5)及更高版本中,所有适当的方法都是由Core Data框架在运行时自动生成的,即使您没有明确声明或实现它们(当然,如果您尝试,您将获得编译器警告使用它们而不在头文件中声明它们).因此,您不需要子类
获得声明和实现的最简单方法是在数据建模器中选择属性,然后从"设计 - >数据模型"菜单中选择"将Objective-C 2.0方法声明复制到剪贴板",粘贴到您的实现类中. h文件.当然,你必须让你的.h和模型保持同步...因此,对于rentzsch非常棒的MO生成器,这是一个从数据模型中自动生成(并重新生成)NSManagedObject子类的工具.
Jim*_*vey 16
为CoreData实体创建.h和.m文件的最简单方法是:
这将生成以下标头和源文件:
Entity.h:
#import <CoreData/CoreData.h>
@interface Entity : NSManagedObject
{
}
@property (retain) NSNumber * uniqueID;
@property (retain) NSString * name;
@property (retain) Entity * parent;
@property (retain) NSSet* children;
@end
@interface Entity (CoreDataGeneratedAccessors)
- (void)addChildrenObject:(Entity *)value;
- (void)removeChildrenObject:(Entity *)value;
- (void)addChildren:(NSSet *)value;
- (void)removeChildren:(NSSet *)value;
@end
Run Code Online (Sandbox Code Playgroud)
Entity.m:
#import "Entity.h"
@implementation Entity
@dynamic uniqueID;
@dynamic name;
@dynamic parent;
@dynamic children;
@end
Run Code Online (Sandbox Code Playgroud)
请注意,该实现不包含除@dynamic标记之外的任何内容,以告诉编译器不要担心缺少与属性匹配的方法/变量.
| 归档时间: |
|
| 查看次数: |
11681 次 |
| 最近记录: |