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.0000000
私がここで犯している間違いは何ですか
以下のように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);
}
スイフト:
次のように定義します。
let appDelegate = UIApplication.shared.delegate as! AppDelegate
使用法:
func setVolumeForAVAudioPlayer()
{
appDelegate.sharedPlayer.setVolume:appDelegate.VolumeDelegate
print("System Volume in player view: \(appDelegate.volumeDelegate)")
}
appdelegate
のviewDidLoad
メンバー変数を初期化していますが、setVolumeForAVAudioPlayer
を呼び出した時点では、そのメソッドは呼び出されていません。
あなたはやっている
PlayerViewController *volumeObject=[[PlayerViewController alloc]init];
[volumeObject setVolumeForAVAudioPlayer];
だが alloc init
はviewControllerのビューをロードしません! viewDidLoad
はまったく呼び出されません。