簡體   English   中英

addObject:不將對象添加到NSMutableArray

[英]addObject: doesn't add objects to 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");
}

問題是,此方法始終打印“ No songs”,這意味着數組的count為0。即使在main.m文件中,我先調用了將歌曲添加到播放列表的方法,也會發生這種情況。

我知道有一些簡單的錯誤,但我不知道這是什么。 我還在這里檢查了類似問題的其他答案,但它們並沒有幫助我。

如果您可以幫助我理解為什么不能將對象添加到數組中,將不勝感激。

這是您可以延遲初始化可變數組的方式。 它的作用是:在您第一次需要它時分配初始化數組。 對於帶有預定義值的靜態數組,這是一種非常常見的做法,不需要在某些事件之前將其加載到內存中。

- (NSMutableArray*)mySongs
{
    if (!_mySongs) {
        _mySongs = [[NSMutableArray alloc] init];
    }
    return _mySongs;
}

更重要的是:您在addSong方法中進行的檢查很好,但是我建議您覆蓋Song類的isEqual方法。

 -(instancetype)initPlaylistWithName: (NSString *)playlistName;
{

    self = [super init];

    if(self)
    {
        _name = playlistName

        _mySongs = [NSMutableArray new];

    }

   return self;

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM