2011-12-10 27 views
0

我已經完成了一個叫做MyBgMusic.h的單例類,它是MyBgMusic.m。如何將該單例類引用到我的SecondViewController或XIB的其餘部分。iOS:如何從單身課程中引用音樂背景?

這裏是我的單例類:

.h文件:

#import <Foundation/Foundation.h> 
#import <AVFoundation/AVAudioPlayer.h> 

@interface MyBgMusic : UIViewController <AVAudioPlayerDelegate> { 


    AVAudioPlayer *player; 
    UIButton *playBgMusic; 


} 

@property (nonatomic, retain) IBOutlet AVAudioPlayer *player; 
@property (nonatomic, retain) IBOutlet UIButton *playBgMusic; 


+ (id)sharedManager; 

-(IBAction) toggleMusic; 


@end 

M檔:

#import "MyBgMusic.h" 

static MyBgMusic *sharedMyManager = nil; 

@implementation MyBgMusic 

@synthesize player,playBgMusic; 

#pragma mark - 
#pragma mark Singleton Methods 

+ (MyBgMusic*)sharedManager { 

    static MyBgMusic *sharedMyManager; 
    if(!sharedMyManager) { 
     static dispatch_once_t oncePredicate; 
     dispatch_once(&oncePredicate, ^{ 
      sharedMyManager = [[super allocWithZone:nil] init]; 
      }); 
     } 

     return sharedMyManager; 
} 

+ (id)allocWithZone:(NSZone *)zone {  

    return [self sharedManager]; 
} 


- (id)copyWithZone:(NSZone *)zone { 
    return self;  
} 

#if (!__has_feature(objc_arc)) 

- (id)retain { 

    return self;  
} 

- (unsigned)retainCount { 
    return UINT_MAX; //denotes an object that cannot be released 
} 


- (id)autorelease { 

    return self;  
} 

- (void)dealloc 
{ 
    [MyBgMusic release]; 
    [playBgMusic release]; 
    [player release]; 
    [super dealloc]; 
} 
#endif 

#pragma mark - 
#pragma mark Custom Methods 

- (IBAction)toggleMusic { 

    if ([self.player isPlaying] == YES) { 
     [self.player stop]; 
    } else { 
     [self.player play]; 
    } 
    self.playBgMusic.enabled = YES; 

} 

- (void)viewDidLoad 
{ 

    NSString *path = [[NSBundle mainBundle] pathForResource:@"music" ofType:@"mp3"]; 
    self.player=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL]; 
    player.delegate = self; 
    [player play]; 
    player.numberOfLoops = -1; 
    [super viewDidLoad]; 

    // Do any additional setup after loading the view from its nib. 
} 

SecondViewController.m(我想從單個類引用,這樣我可以再次使用時不會弄亂背景音樂的按下和關閉。)

- (IBAction)toggleMusic{ 

    if ([self.player isPlaying] == YES) { 
     [self.player stop]; 
    } else { 
     [self.player play]; 
    } 
    self.playBgMusic.enabled = YES; 

} 

我應該聲明是這樣的:

-(IBAction) sharedMusic { 

    [[MyBgMusic sharedManager] toggleMusic]; // instance method shareManager not found. What does it mean? 

} 

回答

0

在SecondViewController創建一個IBAction爲掛鉤的廈門國際銀行則在代碼,然後有它調用

[[MyBgMusic sharedInstance] toggleMusic]; 
+0

我已經有這個代碼在我IBAction爲: - (IBAction爲)toggleMusic { 如果([self.player IsPlaying模塊] == YES){ [self.player站] } else { [self.player play]; } self.playBgMusic.enabled = YES; } – Amink

+0

我應該在哪裏放置這段代碼:[[MyBgMusic sharedInstance] toggleMusic]; – Amink

0

在SecondViewController你應該在IBAction爲調用[[MyBgMusic sharedInstance] toggleMusic];當你想切換音樂。就像您使用self.player一樣。

+0

好的,我會試着去試驗它 – Amink

+0

我再次讀你的代碼,這裏有一些你做錯了的事情。 1.MyBgMusic不應該從UIViewController繼承,而應該從NSObject繼承。 2.刪除UIButton 3.以編程方式初始化AVPlayer-將東西從ViewDidLoad移動到init。你應該把UIButton放在SecondViewController/FirstViewController中。你應該讀一點如何使用單身。 –

0

你必須輸入你的類,無論你想使用此行引用它:

[[MyBgMusic sharedManager] toggleMusic] 

如果你願意,你可以添加甚至財產和引用它無需創建類的實例。

+0

好吧,我會嘗試實驗它,如果有任何問題,請將它還原爲你。 – Amink