我正在学习Objective-C,并且在向NSMutableArray
添加对象时遇到了一些麻烦。我有一个名为Song
的班级和一个名为Playlist
的班级。我需要将Song
添加到Playlist
。这是Playlist.h
文件(该数组称为mySongs
:
#import <Foundation/Foundation.h>
@interface Playlist : NSObject
@property(nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSMutableArray *mySongs;
-(instancetype)initPlaylistWithName: (NSString *)playlistName;
-(instancetype)init;
-(void)addSong: (Song *)theSong;
-(void)removeSong: (Song *)theSong;
-(void)printSongsInPlaylist;
@end
在Playlist.m
文件中,我有一个方法,用于检查播放列表是否包含歌曲,如果是,则将其添加到数组中。它看起来像这样:
-(void)addSong:(Song *)theSong {
for(Song * song in mySongs){
range = [song.title rangeOfString:theSong.title];
if(range.location != NSNotFound)
return;
}
[mySongs addObjects:theSong];
}
我还有一个方法,可以打印特定播放列表中的所有歌曲。这是它的样子:
-(void)printSongsInPlaylist {
if ([mySongs count] != 0) {
for (Song *song in mySongs) {
NSLog(@"Title: %@, Artist: %@, Album: %@, PlayingTime: %@", song.title, song.artist, song.album, song.playingTime);
}
} else {
NSLog(@"No songs");
}
问题是,此方法始终打印&#34;没有歌曲&#34;,这意味着,数组的count
为0.即使在main.m
文件中我调用了首先将歌曲添加到播放列表的方法。
我知道有一些简单的错误,但我无法弄清楚它是什么。我也在这里检查了类似问题的其他答案,但他们并没有帮助我。
如果你能帮助我理解为什么我不能在阵列中添加一个对象,我将不胜感激。
答案 0 :(得分:2)
这就是你如何懒惰地初始化你的可变数组。这样做是:在第一次需要时分配启动数组。对于具有预定义值的静态数组,这是一种非常常见的做法,在某些事件发生之前不需要将其加载到内存中。
- (NSMutableArray*)mySongs
{
if (!_mySongs) {
_mySongs = [[NSMutableArray alloc] init];
}
return _mySongs;
}
更重要的是:
您使用addSong
方法进行的检查很好,但我建议覆盖isEqual
类的Song
方法。
答案 1 :(得分:1)
-(instancetype)initPlaylistWithName: (NSString *)playlistName;
{
self = [super init];
if(self)
{
_name = playlistName
_mySongs = [NSMutableArray new];
}
return self;
}