1

これは、カメラのモーダルビューを提供するクラスです

@interface ViewController : UIViewController <UIImagePickerControllerDelegate> {
  UIImagePickerController *cameraView; // camera modal view
  BOOL isCameraLoaded;
}

@property (nonatomic, retain) UIImagePickerController *cameraView; 
- (IBAction)cameraViewbuttonPressed;
- (void)doSomething;
@end

@implementation ViewController

@synthesize cameraView;
- (void)viewDidLoad {
  cameraView = [[UIImagePickerController alloc] init];
  cameraView.sourceType =   UIImagePickerControllerSourceTypeCamera;
  cameraView.cameraOverlayView = cameraOverlayView;
  cameraView.delegate = self;
  cameraView.allowsEditing = NO;
  cameraView.showsCameraControls = NO;
}

- (IBAction)cameraViewbuttonPressed {       
 [self presentModalViewController:cameraView animated:YES];
 isCameraLoaded = YES;
}

- (void)doSomething {
  [cameraView takePicture];
  if ([cameraView isCameraLoaded]) printf("camera view is laoded");
  else {
    printf("camera view is NOT loaded");
  }
}

- (void)dealloc {
  [cameraView release];
  [super dealloc];
}

@end

実行中のアプリ デリゲートで、doSomething を呼び出します。

ViewController *actions = [[ViewController alloc] init];
[actions doSomething];
[actions release];

カメラ ボタンを押した後、cameraview が読み込まれます アプリ デリゲートで dosomething を呼び出しますが、何も起こらず、「カメラ ビューが読み込まれていません」を返す BOOL に対して null が返されます。

クラスでdoSomething を呼び出すと正常にViewController動作しますが、別のクラスからは動作しません。

ViewControllerクラス内の変数にアクセスするにはどうすればよいですか?

4

2 に答える 2

3

あなたの問題は変数にアクセスすることではありません。/ を使用してゼロから新しいものを作成しViewController、ビュー階層に完全にインストールされているかのようにすぐに使用しようとしていることです。内に設定されていることに注意してください。これは、新しいView Controllerに対して呼び出されることはありません。allocinitcameraViewviewDidLoad

ViewControllerセットアップと作業のインスタンスが既にあるように思われるので、おそらく新しいインスタンスを作成するのではなく、それを使用する必要があります。

ViewController* actions = [self getMyExistingViewControllerFromSomewhere];
[actions doSomething];

そうでない場合は、新しく作成したビューを適切なスーパービューに追加し、使用する前にすべてを適切に初期化する必要があります。

于 2010-08-24T08:06:06.510 に答える
0

.h に追加:

@property (readwrite, assign, setter=setCameraLoaded) BOOL isCameraLoaded;

.m に追加します。

@synthesize isCameraLoaded;

その後、次のことができます。

if ([actions isCameraLoaded]) {
    [actions setCameraLoaded:FALSE];
}
于 2010-08-24T08:07:31.403 に答える