web-dev-qa-db-ja.com

viewcontrollerからappdelegate値を取得する

Appdelegate.h内
playerviewcontrollerAppdelegate.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

私がここで犯している間違いは何ですか

11
AlgoCoder

以下のように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)")
}
34
Hemang

appdelegateviewDidLoadメンバー変数を初期化していますが、setVolumeForAVAudioPlayerを呼び出した時点では、そのメソッドは呼び出されていません。

あなたはやっている

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

だが alloc initはviewControllerのビューをロードしません! viewDidLoadはまったく呼び出されません。

4
iHunter