【发布时间】:2014-03-22 10:57:35
【问题描述】:
新手问题,
我有 3 个类,其中 3 个是 NSObject 的子类
一个。集合类
这个类将有 2 个属性
- masterSongs(包含所有歌曲)声明为 NSMUtableSet(副本,非原子)
- listofPlaylists(包含所有播放列表)声明为 NSMutableArray(副本,非原子)
b.播放列表类
这个类将有 2 个属性
- playListName 声明为 NSString
- songLists 声明为 NSMutableArray(强,非原子),仅存储对歌曲的引用而不是歌曲的副本。
c.歌曲类
这个类有 4 个属性声明为 NSString :
- 标题
- 艺术家
- 上场时间
- 专辑
问题:
- 我想为 Collection 类创建 removeSong 方法,所以当我从 Collection (masterSongs) 中删除特定歌曲时,它也会删除 Collection.listofPlaylists 中存储的所有 playList 中的歌曲。但我被语法困住了*。
*我正在使用查找方法创建一个 NSSet,然后使用该集合从 NSMutableSet masterSongs 中删除歌曲对象,使用 - minusSet: 方法
另外,我 found that 在枚举时更改修改 NSMutableSet 很危险。
到目前为止我在这里尝试过:
- (NSSet *) lookUpTitle: (NSString *)aName {
NSPredicate *filter = [NSPredicate predicateWithFormat:@"title == %@",aName];
NSSet *result = [self.masterSongs filteredSetUsingPredicate:filter];
if ([result count] == 0) {
NSLog(@"not found");
return nil;
}
else{
return result;
}
}
- (void) removeSong: (NSString *)zSong{
for (Song *aSong in masterSongs) {
if ([self lookUpTitle:zSong] != nil) {
NSMutableSet *container = [NSMutableSet setWithSet:self.masterSongs];
}
}
}
- (void) addSong :(Song *)aSong{
if (![masterSongs containsObject:aSong]) {
[masterSongs addObject:aSong];
} }
-(void) addPlaylist: (Playlist *)aPlayList{
if ([listOfPlaylists containsObject:aPlayList]==YES) {
}
else
[listOfPlaylists addObject:aPlayList];
}
-(void) removePlaylist: (Playlist *)aPlayList{
if ([listOfPlaylists containsObject:aPlayList]) {
[listOfPlaylists removeObjectIdenticalTo:aPlayList];
}
else{
;
}
}
【问题讨论】:
-
只是为了强调一点,尽管您确实提到了它,但您不能在枚举集合(集合、数组、字典)时对其进行变异。如果您这样做,它可以(应该并且可能会)抛出异常。
标签: objective-c nspredicate nsset