2013-03-05 3 views
2

У меня есть два класса, класс Song и класс Playlist.Мой метод печати не работает с использованием UTF8String

Это 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 

Song.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 

Playlist.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 

Playlist.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; 
} 
+0

проверить, если он входит в петлю? –

+0

@AnoopVaidya, что вы имеете в виду Anoop? – MNY

+0

ввод в 'for (Song * nextSong in songsCollection) {' loop –

ответ

1

Вы не alloc + init ред songsCollection.

Создать init метод в PlayList.m и поставить ниже там

- (id)init 
{ 
    self = [super init]; 
    if (self) { 
     songsCollection=[NSMutableArray new]; 
    } 
    return self; 
} 
+0

это сработало ???? –

+0

owww yeah :) спасибо! @ Анооп Вайдя – MNY

1

Проблема в том, что вы не заселять ваш songsCollection массив правильно (т.е. он пуст), в связи с определением его имущества:

@property (nonatomic, copy) NSMutableArray *songsCollection; 

Вам нужно изменить его (ARC):

@property (nonatomic, strong) NSMutableArray *songsCollection; 

или (MRR):

@property (nonatomic, retain) NSMutableArray *songsCollection; 

Также изменения все ссылки от songsCollection до self.songsCollection в классе PlayList.

+0

Почему бы не использовать слабый, а не сильный в ARC? –

+0

Это не сработало ... @ trojanfoe – MNY

+0

@ LithuT.V Потому что вы хотите сохранить ссылку на массив, пока существует объект 'PlayList'. – trojanfoe

0

Попробуйте это.

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

songsCollection массив не может иметь действительный memory.Use strong.Instantiate его в методе

-(id)init 
{ 
    self=[super init]; 
    self.songsCollection =[[NSMutableArray alloc]initWithCapacity:3]; 
    return self; 
} 
+0

эта линия работает ... для цикла dosent @Lithu T.V – MNY

Смежные вопросы