2013-10-18 21 views
1

目前,我正在創建一個使用核心數據作爲本地存儲的應用程序。我對我的應用程序的兩個實體有問題:藝術家和專輯。一位藝術家可以製作很多專輯,而一張專輯也可以由多位藝術家組成。iOS核心數據addRelationshipObject和addRelationship之間的多對多關係差異?

#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之間的區別:(相冊*)值& addToAlbums:(NSSet中*)值?

如果我想向藝術家和專輯插入一些信息,例如藝術家「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"; 

接下來我應該怎麼做才能存儲我想要的信息。 在此先感謝您的所有意見!

回答

0

addToAlbumsObject:添加單個相冊對象到藝術家, 例如所述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:對每個相冊分別。

或許,如果你使用奇異形式爲您的實體名稱(專輯,藝術家)和關係重新命名toAlbumsalbums一切都變得略少混亂。 然後第一個代碼塊變成:

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

非常感謝您的回答。但是,我需要添加一個反向,如 [anAlbum addToArtistsObject:anArtist]; – Sunly

+0

@ user2756388:否。如果'toAlbums'和'toArtists'被定義爲*反關係*,那麼設置一個方向就足夠了,並自動設置另一個方向。 –

+0

我明白了。非常感謝您的有用答案,Martin R. – Sunly