IOS:通过一对多关系获取核心数据

时间:2016-02-20 13:32:33

标签: ios core-data one-to-many

我有一个包含多个实体的数据模型。对于以一对一关系加入的实体,在从一个实体获取之后,我能够通过关系从另一个实体访问属性。

//class for artists

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@class Songs;

@interface Artists : NSManagedObject
@property (nonatomic, retain) NSString * artistname;
//this is relationship
@property (nonatomic, retain) Songs *songs;

//class for Songs
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@class Artists;

@interface Songs : NSManagedObject
@property (nonatomic, retain) NSString * songname;
//this is relationship
@property (nonatomic, retain) Artists *artists;

如果关系是一对一的,一旦我执行了艺术家的获取并拥有了一个managedobjectcontext,我就可以使用以下内容获得每位艺术家的歌曲:

NSLog(@"song for one hit wonder%@",self.artists.songs.songname);

当我将关系从一对一更改为一对多,即一位艺术家,多首歌曲时,这不再有效,并引发错误,引用[_NSFaultingMutableSet songname

我尝试使用键值来访问歌曲但没有成功。

NSLog(@"songs:%@",self.artists.songs.valueForKey[@"songname"]);

此外,我已经尝试将NSSet合并到某处,因为错误消息引用了可变集合,并且一对多关系被认为是以这种方式捕获但我无法弄清楚如何使用NSSet。

NSSet *songs = self.artists.songs.songname;//gives incompatible pointer type warning

如果在一对多关系的情况下如何从另一个实体检索值的任何建议将非常感激。

1 个答案:

答案 0 :(得分:1)

首先,将Core Data实体的名称设置为复数形式有点令人困惑,因为它总是许多

如果您将模型中的关系从一对一更改为一对多,则必须将NSManagedObject子类中的类型更改为NSSet,例如

@property (nonatomic, retain) NSSet *songs;

您可以通过在Xcode中自动重新创建NSManagedObject子类来证明它。