0

2 つの ViewController を管理する UITabBarController があります。1 つ目は、ユーザーがゲーム設定を変更できるようにする UIViewController です。2 つ目は、ゲーム シミュレーションを実行する GLKViewController です。

Game ViewController が Settings ViewController から設定を取得できるようにしようとしています。「速度」を表す設定ビューにスライダーがあります。

他のコントローラーへの参照がありますが、Slider を適切にサポートする変数を公開できません。

SecondViewController.h

@interface SecondViewController : UIViewController{
    IBOutlet UISlider    * mySlider;
}
property (nonatomic,retain) IBOutlet UISlider    * mySlider;
@end

SecondViewController.m

- (IBAction) mySliderWasMoved:(id)sender;
@implementation SecondViewController
@synthesize mySlider;
- (IBAction) mySliderWasMoved:(id)sender{    
};

ThirdViewController.m

NSArray *tmpVCs = self.parentViewController.tabBarController.viewControllers;
UIViewController *tmpVC = [tmpVCs objectAtIndex:1]; //obtain handle to SecondViewController
//NSNumber *mySpeed = tmpVC.mySlider;  //doesn't see mySlider
NSNumber *mySpeed = [tmpVC mySlider];  //doesn't see mySlider

私はこれに不慣れで、プロジェクトには学ぶべき多くの側面があるため、現時点ではデータの管理方法を学ぼうとはしていません。インスタンス変数にアクセスする方法を知る必要があるだけです

4

2 に答える 2

0

他の人の利益のために:私は他のクラスへのハンドルをつかみましたが、リターンタイプを正しいタイプのクラスとして宣言していませんでした。

交換:

UIViewController *tmpVC = [tmpVCs objectAtIndex:1]; 

と:

SecondViewController *tmpVC = [tmpVCs objectAtIndex:1]; 

これで、SecondViewControllerに固有のプロパティにアクセスできます。

于 2012-07-19T21:01:11.307 に答える
0

コメントで言及されているように、

  1. NSDefault を使用して、変更されたスライダーの値を保存します。アプリケーションを初めてロードするときは、デフォルト値を設定する必要があります。

  2. シングルトン オブジェクトを使用して値を格納します。

「現時点ではデータの永続性を学ぼうとはしていません。また、アーキテクチャの指示も必要ありません」というあなたの言葉を引用することは理解していますが、ここでの経験則は、おそらく何らかの方法でインスタンス変数にアクセスできるということです。その他ですが、最善のアプローチをとることはあなたに大きな利益をもたらすと思います。

ちょうど私の2セント。

于 2012-07-16T04:43:46.133 に答える