我的问题是,我有一个要求创建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方法添加歌曲来添加歌曲..
答案 0 :(得分: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;
}
有关详细信息,请按照以下link
中的对象比较进行操作