【问题标题】:iOS Core data Many-to-Many relationship difference between addRelationshipObject and addRelationship?iOS核心数据addRelationshipObject和addRelationship之间的多对多关系区别?
【发布时间】:2013-10-18 03:47:20
【问题描述】:

目前,我正在创建一个使用核心数据作为本地存储的应用程序。我对我的应用程序的两个实体有疑问:艺术家和专辑。一位艺术家可以制作多张专辑,而一张专辑也可以由多位艺术家组成。

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>

@class Albums;

@interface Artists : NSManagedObject

@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSSet *toAlbums;
@end

@interface Artists (CoreDataGeneratedAccessors)

- (void)addToAlbumsObject:(Albums *)value;
- (void)removeToAlbumsObject:(Albums *)value;
- (void)addToAlbums:(NSSet *)values;
- (void)removeToAlbums:(NSSet *)values;

@end

addToAlbumsObject:(Albums *)value 和 addToAlbums:(NSSet *)values 有什么区别?

如果我想在艺术家和专辑中插入一些信息,例如,艺术家“Jame”和“Jonh”制作了 2 张专辑“天空专辑”和“明星专辑”,以及“天空专辑”。这是我所做的代码。

NSManagedObjectContext *context = [self managedObjectContext];

Artists *artists = [NSEntityDescription insertNewObjectForEntityForName:@"Artists" inManagedObjectContext:context];

artists.name = @"Jame";

Albums *albums = [NSEntityDescription insertNewObjectForEntityForName:@"Albums" inManagedObjectContext:context];

albums.name = @"sky album";

接下来我应该怎么做才能存储我想要的信息。 在此先感谢所有 cmets!

【问题讨论】:

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


    【解决方案1】:

    addToAlbumsObject:single 专辑对象添加到 Artist 的 toAlbums 关系中, 例如

    Artists *anArtist = ...;
    Albums *anAlbum = ...;
    [anArtist addToAlbumsObject:anAlbum];
    

    建立anArtistanAlbum之间的关系。

    addToAlbums: 在一个步骤中将多个专辑对象添加到toAlbums 关系:

    Artists *anArtist = ...;
    Albums *album1 = ...;
    Albums *album2 = ...;
    NSSet *setOfAlbums = [NSSet setWithObjects:album1, album2, nil];
    [anArtist addToAlbums:setOfAlbums];
    

    这(我认为)不太常用,因为您可以通过调用来实现相同的目的 addToAlbumsObject: 分别对应每张专辑。

    如果您对实体名称(专辑、艺术家)使用单数形式并将关系从toAlbums 重命名为albums,也许一切都会变得更容易混淆。 那么第一个代码块就变成了:

    Artist *anArtist = ...;
    Album *anAlbum = ...;
    [anArtist addAlbumsObject:anAlbum];
    

    【讨论】:

    • 非常感谢您的回答。但是我需要添加一个反向的,例如 [anAlbum addToArtistsObject:anArtist];
    • @user2756388: 否。如果toAlbumstoArtists 被定义为反向关系,那么设置一个方向就足够了,并且会自动设置另一个方向。
    • 我明白了。非常感谢您的有用回答,Martin R。
    • @user2756388:不客气。 - 请注意,您可以通过单击复选标记“接受”答案。这标志着问题已解决,并为您和答案的作者提供了一些声誉。
    • 哦,我才知道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    • 2012-03-08
    • 2017-12-11
    • 2016-06-30
    • 1970-01-01
    相关资源
    最近更新 更多