0

この質問が多く寄せられていることは知っていますが、Objective-C は初めてです。最初のviewcontroller.hの私のコード:

@interface ViewController : UIViewController
@property (nonatomic) int mutecounter;
@property (nonatomic) ViewController *targetLevelController;
@end

.m ファイルの最初のビューコントローラーの私のコード:

#import "ViewController.h"
@interface ViewController ()
@end

@implementation ViewController
@synthesize mutecounter;
- (void)viewDidLoad
    {
    [super viewDidLoad];
    NSURL *musicFile = [[NSBundle mainBundle] URLForResource:@"Ambler" withExtension:@"mp3"];
    self.backgroundMusic = [[AVAudioPlayer alloc] initWithContentsOfURL:musicFile error:nil];
    self.backgroundMusic.numberOfLoops = -1;
    self.backgroundMusic.volume = 0.3;
    [self.backgroundMusic play];
    [self.muteButtonOutlet setBackgroundImage:[UIImage imageNamed:@"mutebutton.png"] forState: UIControlStateNormal];
    _targetLevelController=[[ViewController alloc]init];
    _targetLevelController.mutecounter = mutecounter;
}
- (IBAction)muteButton:(id)sender {
    if (mutecounter % 2 == 0){
        self.backgroundMusic.volume = 0;
        mutecounter = mutecounter + 1;
        [self.muteButtonOutlet setBackgroundImage:[UIImage imageNamed:@"unmutebutton.png"] forState: UIControlStateNormal];
    } else {
        self.backgroundMusic.volume = 0.3;
        mutecounter = mutecounter + 1;
        [self.muteButtonOutlet setBackgroundImage:[UIImage imageNamed:@"mutebutton.png"] forState: UIControlStateNormal];
    }
}

そして、2番目のViewcontroller.hの私のコード:

@interface LevelController : UIViewController
- (IBAction)muteButton:(id)sender;
@end

そして2番目のViewcontroller.mの私のコード

#import "LevelController.h"
#import "ViewController.h"

@interface LevelController ()

@end
@implementation LevelController
int mutecounter2;
- (void)viewDidLoad
{
    [super viewDidLoad];
    NSURL *musicFile = [[NSBundle mainBundle] URLForResource:@"Ambler" withExtension:@"mp3"];
    self.backgroundMusic = [[AVAudioPlayer alloc] initWithContentsOfURL:musicFile error:nil];
    self.backgroundMusic.numberOfLoops = -1;
    self.backgroundMusic.volume = 0.3;
    [self.backgroundMusic play];
    ViewController *targetLevelController=[[ViewController alloc]init];
    mutecounter2 = targetLevelController.mutecounter;
    if (mutecounter2 % 2 == 0){
        self.backgroundMusic.volume = 0;
        [self.muteButtonOutlet setBackgroundImage:[UIImage imageNamed:@"mutebutton.png"] forState: UIControlStateNormal];
    } else {
        self.backgroundMusic.volume = 0.3;
        [self.muteButtonOutlet setBackgroundImage:[UIImage imageNamed:@"unmutebutton.png"] forState: UIControlStateNormal];
    }
}

- (IBAction)muteButton:(id)sender {
    if (mutecounter2 % 2 == 0){
        self.backgroundMusic.volume = 0;
        mutecounter2 = mutecounter2 + 1;
        [self.muteButtonOutlet setBackgroundImage:[UIImage imageNamed:@"unmutebutton.png"] forState: UIControlStateNormal];
    } else {
        self.backgroundMusic.volume = 0.3;
        mutecounter2 = mutecounter2 + 1;
        [self.muteButtonOutlet setBackgroundImage:[UIImage imageNamed:@"mutebutton.png"] forState: UIControlStateNormal];
    }

}

問題は、コードが機能していないことです。誰かが私を助けることができますか?私は常に、mutecounter2 で値 0 を取得します。しかし、それは1か2か3か何かでなければなりません。ありがとうマティス

ここに画像の説明を入力

4

2 に答える 2

1

私は常に、mutecounter2 で値 0 を取得します。しかし、それは1か2か3か何かでなければなりません。

良い...

ViewController *targetLevelController=[[ViewController alloc]init];
mutecounter2 = targetLevelController.mutecounter;

ViewController インスタンスを初期化しています。これには mutecounter プロパティがありますが、どこにも初期化していません。したがって、mutecounter2 は 0 です。

if (mutecounter2 % 2 == 0){
    self.backgroundMusic.volume = 0;
    mutecounter2 = mutecounter2;
    [self.muteButtonOutlet setBackgroundImage:[UIImage imageNamed:@"mutebutton.png"] forState: UIControlStateNormal];
}

0 % 2 = 0 であるため、その条件付きブロックに入ります。ボリューム プロパティを 0 に設定してから、mutecounter2 をそれ自体に設定すると、まだ 0 のままです (この行は削除する必要があり、何も実行していません)。

一歩下がって、ここで 2 つの View Controller が必要かどうか疑問に思っていますか? 親/子ビュー コントローラーの概念は iOS 5 で可能になりましたが、iOS 6 では、ストーリーボードにセグエを埋め込むことでさらに簡単に実装できます。始めたばかりのようですので、ストーリーボードを使って始めることをお勧めします。Apple は、ドキュメントでいくつかの Storyboard チュートリアルを提供しています。

本当に 2 つの View Controller が必要な場合は、通常、次のようなデータを View Controller に直接渡します。

ViewController *newVC = [[ViewController alloc] init]
newVC.propertyName = someValue

しかし、あなたはその逆を持っているので、値をプッシュするのではなく、別の VC から値を「プル」しようとしているように見えます。そうしないと、VC に不要な依存関係が生じるためです。

しかし、実際には、ストーリーボードを使用してください。

于 2013-07-06T13:04:46.517 に答える