2013-08-23 18 views
11

W Appdelegate.h
I przywoził playerviewcontroller w obu Appdelegate.h i Appdelegate.m plików.Uzyskiwanie wartości appdelegate z viewcontroller

@class PlayerViewController; 
    @property(nonatomic)float volumeDelegate;   

W Appdelegate.m

@synthesize volumeDelegate; 
- (void)volumeChanged:(NSNotification *)notification 
{ 
volumeDelegate =1.0 
    PlayerViewController *volumeObject=[[PlayerViewController alloc]init]; 
[volumeObject setVolumeForAVAudioPlayer]; 
} 

W Playerviewcontroller.h

-(void)setVolumeForAVAudioPlayer; 

W Playerviewcontroller.m

@interface PlayerViewController() 
{ 
AppDelegate *appdelegate; 

} 
    -(void)viewDidLoad 
    { 
    appdelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; 
    } 

    -(void)setVolumeForAVAudioPlayer 
    { 
[appdelegate.sharedplayer setVolume:appdelegate.volumeDelegate]; 
NSLog(@"System Volume in player view: %f",appdelegate.volumeDelegate); 
} 

Po uruchomieniu otrzymuję wartość volumeDelegate jako zero, jak poniżej.

System Volume w widoku odtwarzacza: 0,000000000

Jaki jest Mistake Robię tutaj

Odpowiedz

27

Można uzyskać dostęp do obiektu AppDelegate jak poniżej

Objective-C

Należy zdefiniować następująco:

AppDelegate appDelegate; 

dostęp to tak:

appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; 

Zastosowanie:

- (void)setVolumeForAVAudioPlayer 
{ 
    [appDelegate.sharedplayer setVolume:appdelegate.volumeDelegate]; 
    NSLog(@"System Volume in player view: %f",appDelegate.volumeDelegate); 
} 

Swift:

zdefiniować tak:

let appDelegate = UIApplication.shared.delegate as! AppDelegate 

Zastosowanie:

func setVolumeForAVAudioPlayer() 
{ 
    appDelegate.sharedPlayer.setVolume:appDelegate.VolumeDelegate 
    print("System Volume in player view: \(appDelegate.volumeDelegate)") 
} 
4

Ty inicjalizacji zmiennej appdelegate członkowskim w viewDidLoad, ale ta metoda nie jest wywoływana w momencie wywołania setVolumeForAVAudioPlayer!

Robisz

PlayerViewController *volumeObject=[[PlayerViewController alloc]init]; 
[volumeObject setVolumeForAVAudioPlayer]; 

Ale alloc init nie czyni widok viewController do ładowania! viewDidLoad nie jest w ogóle wywoływany.