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

我在 CLientViewController.h 中有 #import "CameraViewController.h"

我完全迷路了!我以为我已经正确定义了所有内容,但我想不是。我的代码有什么问题?

更新:将代码更改为调用实例后,现在出现此错误:

架构 armv7 的未定义符号:
“_OBJC_CLASS_$_CameraViewController”,引用自:ClientSetupViewController 中的 objc-class-ref。 :错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

4

2 回答 2

3

在制作The Best iOS App Ever (TM)之前,请再次阅读 Objective-C 教程——你缺少语法的基础知识。

一,您不一致地使用-and方法前缀。+决定它应该是类(+)还是实例(-)方法并相应地添加前缀 - 并在头文件的声明定义(在实现文件中)中使用相同的前缀。

解决此问题后,如果您定义了类方法,则必须将消息发送到类本身;如果您有实例方法,则必须将消息发送到实例。使用类方法的示例:

[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]

一条消息被发送到一个对象或一个类。在您的代码中,您只有 message call 中的消息名称[ ],没有指明该消息应该发送到哪里。

于 2012-11-13T20:56:51.010 回答