【问题标题】:Ios UIImageController delegate undeclared errorios UIImageController委托未声明的错误
【发布时间】:2017-02-11 05:07:39
【问题描述】:

我知道这个问题被问了好几次。 但我遵循这两种方法来解决未声明的标识符自我。

我在 .m 类中声明了@interface

【问题讨论】:

  • 你必须在 imagepicker 上声明委托方法然后才能解决
  • 你为什么用 C/C++ 方法写这个?那是一个 .mm 文件吗?用objective-c方法编写它。您的问题将得到解决

标签: ios objective-c camera delegates uiimagepickercontroller


【解决方案1】:

我相信您正面临这些错误,因为您是在 C++/C 方法中编写的。如果你把它写在一个objective-c方法中,你的问题应该会得到解决。

- (void)cameraCapture {
    UIImagePickerController *picker = [UIImagePickerController new];
    picker.delegate = self;
}

你可以用C/C++的方法写成下面这样。

void cameraCapture(void* object) {

    YourCurrentViewController *vc = (__bridge YourCurrentViewController *)object;

    UIImagePickerController *picker = [UIImagePickerController new];
    picker.delegate = vc;
}

通过以下方式从 Objective-C 方法调用它。

CameraCapture(1, "imgName", (__bridge void *)self);

从 C/C++ 方法调用 Objective-C 方法。

void CameraCapture(long cCameraClient, const char *imgName, void* object) {

    SATController *vc = (__bridge SATController *)object;
    UIImagePickerController *picker = [UIImagePickerController new];
    picker.delegate = self;
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;
    picker.allowsEditing = YES;

    [self presentModalViewController:picker animated:YES];
}

此外,您不能从 C++ 方法直接访问 self。您需要将其传递给函数。这就是输入void *object 的原因。 void* 是一个没有关联数据类型的指针。它可以保存任何类型的地址,并且可以转换为任何类型。

【讨论】:

  • 正确。我不认识这个。但是你能解释一下如何从 c/C++ 方法中调用这个方法吗?
  • 感谢您的回答。但我对此很陌生,所以,我想学习这个。你有这方面的参考链接吗?
  • 我建议你阅读苹果在toll-free bridging 上的文档。 void * 表示它指向任何对象,有点类似于objective-c 中的id。我建议你阅读一本很棒的 C++ 书籍和苹果关于 Core-Foundation 对象的文档。另外,请点赞:D
  • 您应该更新您的答案,我想从 c/c++ 方法调用目标 c (ios) 方法。你提到了反之亦然 flow 。 :O
  • 我没有任何对象类型的东西。请参阅我的问题以供参考。我试过你的方法。它没有用。 (无效*对象)??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-20
相关资源
最近更新 更多