Получение значения appdelegate из viewcontroller

В Appdelegate.h
Я импортировал playerviewcontroller в файлы Appdelegate.h и Appdelegate.m.

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

В Appdelegate.m

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

В Playerviewcontroller.h

 -(void)setVolumeForAVAudioPlayer;

В 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);
 }

Когда я запускаю это, я получаю значение volumeDelegate как нуль, как показано ниже.

Объем системы в просмотре плеера: 0.000000000

Что такое ошибка, которую я делаю здесь

Ответ 1

Вы можете получить доступ к объекту AppDelegate, как показано ниже

Objective-C

Определите это следующим образом:

AppDelegate appDelegate;

Доступ к нему следующим образом:

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

Использование:

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

Swift:

Определите это следующим образом:

let appDelegate = UIApplication.shared.delegate as! AppDelegate

Использование:

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

Ответ 2

Вы инициализируете переменную-член appdelegate в viewDidLoad, но этот метод не вызывается в тот момент, когда вы вызываете setVolumeForAVAudioPlayer!

Вы делаете

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

Но alloc init не делает просмотр viewController для загрузки! viewDidLoad вообще не вызывается.