0

インターネットで見つけたコードを使用して、iPad アプリから写真を撮ろうとしています。私はこの方法を持っています:

- (BOOL) startCameraControllerFromViewController: (UIViewController*) controller
                                   usingDelegate: (id <UIImagePickerControllerDelegate,
                                                   UINavigationControllerDelegate>) delegate {

CameraViewController.m というファイルで。

CameraViewController.h には、次の定義があります。

@interface CameraViewController : UIViewController

+ (BOOL) startCameraControllerFromViewController: (UIViewController*) controller
                                   usingDelegate: (id <UIImagePickerControllerDelegate,
                                   UINavigationControllerDelegate>) delegate;

@end

ClientSetupViewController.m にあるこのメソッドから呼び出そうとしています:

    - (void) captureImage  {

        [startCameraControllerFromViewController: self usingDelegate: self];
}

というエラーが表示されます

宣言されていない識別子 startCameraControllerFromViewController の使用

私は #import "CameraViewController.h" を CLientViewController.h に持っています

私は完全に迷っています!すべてが正しく定義されていると思っていましたが、そうではないと思います。コードの何が問題になっていますか?

更新:コードを変更してインスタンスを呼び出すと、このエラーが発生します:

アーキテクチャ armv7 の未定義シンボル:
「_OBJC_CLASS_$_CameraViewController」、参照元: ClientSetupViewController.o の objc-class-ref の CameraViewController.o l_OBJC_$_CATEGORY_CameraViewController_$_CameraDelegateMethods の CameraViewController.o ld: アーキテクチャ armv7 clang のシンボルが見つかりません: エラー: リンカー コマンドが終了コード 1 で失敗しました (呼び出しを確認するには -v を使用してください)

4

2 に答える 2

3

史上最高のiOSアプリ(TM)を作成する前に、Objective-Cチュートリアルをもう一度実行してください。構文の基本が欠けています。

-1つは、メソッドプレフィックスと+メソッドプレフィックスを一貫して使用していないことです。+クラス()メソッドとインスタンス( )メソッドのどちらにするかを決定し、それに応じてプレフィックスを追加します。ヘッダーファイルの宣言(実装ファイルの)定義-の両方で同じプレフィックスを使用します。

これを修正したら、クラスメソッドを定義した場合はクラス自体に、インスタンスメソッドがある場合はインスタンスにメッセージを送信する必要があります。クラスメソッドを使用した例:

[CameraViewController startCameraControllerFromViewController:self usingDelegate:self];

インスタンスメソッドを使用した例:

[someOtherViewController startCameraControllerFromViewController:self usingDelegate:self];

someOtherViewControllerそれがの有効なインスタンスであると仮定しますCameraViewController

于 2012-11-13T20:55:42.077 に答える
1

が実際にクラス関数である場合startCameraControllerFromViewController:usingDelegate:(+で示されているように)、関数を呼び出す方法は次のようになります。

[CameraViewController startCameraControllerFromViewController: self usingDelegate: self]

メッセージはオブジェクトまたはクラスに送信されます。コードでは、メッセージ呼び出しにメッセージ名だけが含まれており[ ]、このメッセージの送信先は示されていません。

于 2012-11-13T20:56:51.010 に答える