2

Song クラスと Playlist クラスの 2 つのクラスがあります。

これは Song.h です:

#import <Foundation/Foundation.h>

@interface Song : NSObject

@property (nonatomic, copy) NSString *artist, *title, *album, *time;

-(void) setSong:(NSString *)theSongName andArtist:(NSString *)theArtist andAlbum:(NSString *)theAlbum andPlayingTime:(NSString *)theTime;

@end

歌.m

@implementation Song

@synthesize title, album, artist, time;

-(void) setSong:(NSString *)theSongName andArtist:(NSString *)theArtist andAlbum:(NSString *)theAlbum andPlayingTime:(NSString *)theTime{

    self.title = theSongName;
    self.artist = theArtist;
    self.album = theAlbum;
    self.time = theTime;
}

@end

プレイリスト.h

@interface PlayList : NSObject

@property (nonatomic, copy) NSString *playListName;
@property (nonatomic, copy) NSMutableArray *songsCollection;

-(void) addSongToPlayList:(Song *) someSong;
-(void) removeSongFromPlayList:(Song *) theSong;
-(void) print;

@end

プレイリスト.m:

@implementation PlayList

@synthesize songsCollection, playListName;

-(void) addSongToPlayList:(Song *) someSong{

    [songsCollection addObject:someSong];
}


-(void) removeSongFromPlayList:(Song *)theSong{

    [songsCollection removeObjectIdenticalTo:theSong];
}

-(void) print{

        NSLog(@"================= Playlist Name: %@ =============", playListName);
    for (Song *nextSong in songsCollection){
        NSLog(@"Artist         Song         Album         Time");
        NSLog(@"------         ----         -----         ----");
        NSLog(@"%s             %s           %s            %s  ", [nextSong.artist UTF8String], [nextSong.title UTF8String], [nextSong.album UTF8String], [nextSong.time UTF8String]);
        NSLog(@"=================================================");
    }
}

@end

printメソッドは私に問題を与えるものであり、次の行を出力するだけです:

NSLog(@"================= Playlist Name: %@ =============", playListName);

main.m

#import <Foundation/Foundation.h>
#import "Song.h"
#import "PlayList.h"

int main(int argc, const char * argv[])
{

    @autoreleasepool {

        Song *song1 = [[Song alloc] init];
        [song1 setSong:@"Flying away" andArtist:@"Madona" andAlbum:@"Love collection" andPlayingTime:@"3:52"];

        PlayList *playList1 = [[PlayList alloc] init];
        [playList1 setPlayListName:@"Cool Soongs to listen"];


        [playList1 addSongToPlayList:song1];
        [playList1 print];



    }
    return 0;
}
4

3 に答える 3

1

問題はsongsCollection、プロパティの定義が原因で、配列が適切に設定されていない(つまり、空である)ことです。

 @property (nonatomic, copy) NSMutableArray *songsCollection;

(ARC)に変更する必要があります:

 @property (nonatomic, strong) NSMutableArray *songsCollection;

または(MRR):

 @property (nonatomic, retain) NSMutableArray *songsCollection;

また、クラス内のすべての参照をからsongsCollectionに変更します。self.songsCollectionPlayList

于 2013-03-05T15:55:29.153 に答える
1

あなたはalloc+ initedを持っていませんsongsCollection

initPlayList.m にメソッドを作成し、その下に配置します

- (id)init
{
    self = [super init];
    if (self) {
        songsCollection=[NSMutableArray new];
    }
    return self;
}
于 2013-03-05T16:10:16.430 に答える
0

これを試して。

NSLog(@"================= Playlist Name: %@ =============", self.playListName);

songsCollection配列に有効なメモリがない可能性があります。strongを使用してください。メソッドでインスタンス化してください。

-(id)init
{
    self=[super init];
    self.songsCollection =[[NSMutableArray alloc]initWithCapacity:3];
    return self;
}
于 2013-03-05T16:04:03.740 に答える