0

我的问题是,我有一个要求创建 3 个类的练习:

歌曲(创建和设置歌曲) 播放列表(创建和添加歌曲) MusicCollection(拥有播放列表的集合)现在这个类很棘手,我需要library在播放列表集合中有一个主播放列表,它将包含每首歌曲收藏...

因此,根据我看到的一些人在调用库的 Playlist 类型的 MusicCollection 属性中定义的内容,以及他们在初始化时所做的定义:

-(id) initWithName: (NSString *) theName  
{  
    self = [super init];  

    if (self) {  
        musicCollection = [[NSMutableArray alloc] init];  
        library = [[Playlist alloc] initWithName: @"library"];  
        [musicCollection addObject: library];  
    }  
    return self;  
}  

据我了解,每次用户初始化一个集合时,都会将一个播放列表对象添加到集合数组中......

问题是在集合的 addPlaylist 方法中,他们没有将此播放列表歌曲添加到库中......就像这样:

-(void) addPlaylist: (Playlist *) thePlaylist  
{  
    if ([musicCollection containsObject: thePlaylist] == NO)  
        [musicCollection addObject: thePlaylist];  
}  

有什么想法吗?我真的坚持这个:/

我虽然可能让库通过集合数组中的一个数组并遍历它以查看歌曲是否在库中,如果不添加它们..

现在,在 Playlist.m 中,addsong 方法是:

-(void) addSong:(Song *)theSong  
{  
    [playList addObject:theSong];  
}  

但我在 MusicCollection.m 中看到他们添加了一种添加歌曲的方法,将歌曲添加到库中:

-(void) addSong: (Song *) theSong toPlaylist: (PlayList *) thePlaylist  
{  
    if([thePlaylist.playList containsObject:theSong]==NO)  
        [thePlaylist addSong:theSong];  

    if([library.playList containsObject:theSong]==NO)  
        [library addSong:theSong];  

}  

但是,如果我创建一个播放列表并将其添加到 MusicCllection 怎么办?无需通过 MusicCollection 方法添加歌曲即可添加歌曲..

4

1 回答 1

0

为了使对象比较起作用

-(void) addPlaylist: (Playlist *) thePlaylist  
{  
    if ([musicCollection containsObject: thePlaylist] == NO)  
        [musicCollection addObject: thePlaylist];  
}  

你必须覆盖isEqual:方法PlayList

- (BOOL)isEqual:(id)other {

    if (other == self)
        return YES;

    if (!other || ![other isKindOfClass:[self class]])
        return NO;

    return [self isEqualToPlayList:other];

}

 //Assuming playListId is an unique identifier in `PlayList`
- (BOOL)isEqualToPlayList:(PlayList*)playList{

    if (self == playList)
        return YES;

    if (self.playListId != playList.playListId)
        return NO;
    //If you you a combinational uniqueness, check for them as well

    return YES;

}

有关更多信息,请按照以下链接中的对象比较

于 2013-03-06T02:09:25.693 回答