addObject:不向NSMutableArray添加对象

时间:2018-01-23 15:13:58

标签: ios objective-c nsmutablearray

我正在学习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文件中我调用了首先将歌曲添加到播放列表的方法。

我知道有一些简单的错误,但我无法弄清楚它是什么。我也在这里检查了类似问题的其他答案,但他们并没有帮助我。

如果你能帮助我理解为什么我不能在阵列中添加一个对象,我将不胜感激。

2 个答案:

答案 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;

}