【发布时间】:2017-02-11 05:07:39
【问题描述】:
【问题讨论】:
-
你必须在 imagepicker 上声明委托方法然后才能解决
-
你为什么用 C/C++ 方法写这个?那是一个 .mm 文件吗?用objective-c方法编写它。您的问题将得到解决
标签: ios objective-c camera delegates uiimagepickercontroller
【问题讨论】:
标签: ios objective-c camera delegates uiimagepickercontroller
我相信您正面临这些错误,因为您是在 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* 是一个没有关联数据类型的指针。它可以保存任何类型的地址,并且可以转换为任何类型。
【讨论】:
toll-free bridging 上的文档。 void * 表示它指向任何对象,有点类似于objective-c 中的id。我建议你阅读一本很棒的 C++ 书籍和苹果关于 Core-Foundation 对象的文档。另外,请点赞:D