Получение значения 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
вообще не вызывается.