【问题标题】:No type or protocol named 'AVCaptureVideoDataOutputSampleBufferDelegate' in -Swift.h header file-Swift.h 头文件中没有名为“AVCaptureVideoDataOutputSampleBufferDelegate”的类型或协议
【发布时间】:2019-01-27 19:51:17
【问题描述】:

我有一个 Objective-C 项目,我在其中使用 Swift 脚本和 Obj-C 脚本。

在其中一个 Swift 脚本中,我有一个类:

@objc public class VideoCapture: NSObject, AVCaptureVideoDataOutputSampleBufferDelegate {
~~bunch of functions~~
}

因为它是一个 Obj-C 项目,所以我在它前面加上了@obj,以便它们出现在我的 ($project_name-Swift.h) 头文件中。

我的头文件中写入的内容出现错误:

// sn-p 来自头文件:project_name-Swift.h

 #import <AVFoundation/AVFoundation.h>.  <— I added this to make sure that AVFoundation is present in the header file

SWIFT_CLASS("_TtC17FLIROneSDKExample12VideoCapture")
@interface VideoCapture : NSObject <AVCaptureVideoDataOutputSampleBufferDelegate>   <<——!!! error: No type or protocol named 'AVCaptureVideoDataOutputSampleBufferDelegate'
- (void)captureOutput:(AVCaptureOutput * _Nonnull)output didOutputSampleBuffer:(CMSampleBufferRef _Nonnull)sampleBuffer fromConnection:(AVCaptureConnection * _Nonnull)connection;
- (void)captureOutput:(AVCaptureOutput * _Nonnull)output didDropSampleBuffer:(CMSampleBufferRef _Nonnull)sampleBuffer fromConnection:(AVCaptureConnection * _Nonnull)connection;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

我不明白是什么原因造成的,我猜这与无法从头文件正确访问 AVFoundation 库或其他原因有关。

有解决这个问题的想法吗?

【问题讨论】:

    标签: ios objective-c swift xcode avfoundation


    【解决方案1】:

    我有同样的问题。添加@objc@protocol 没有帮助。我通过添加解决它

    #import <AVFoundation/AVFoundation.h>
    

    #import &lt;project_name-Swift.h&gt; 之前的PrefixHeader.pch 文件。

    我希望它对某人有所帮助。

    【讨论】:

    • 是的,它确实帮助了我。谢谢:)
    【解决方案2】:

    尝试在您的快速导入类之上使用@objcMembers,这将确保您可以访问所有objective-c 代码。

    【讨论】:

    • 谢谢!将其添加到我的课堂上,例如 @objcMembers public class VideoCapture: NSObject, AVCaptureVideoDataOutputSampleBufferDelegate { 但不幸的是它仍然无法正常工作。我进入我的 -swift 头文件:@interface VideoCapture : NSObject &lt;AVCaptureVideoDataOutputSampleBufferDelegate&gt; &lt;-- error No type or protocol named 'AVCaptureVideoDataOutputSampleBufferDelegate'
    • 尝试将此委托替换为其他编译正常并查找差异的委托。如果问题没有解决,请分享这个有问题的委托的 h 文件头。
    • 我已经用 AVCapturePhotoCaptureDelegate 进行了同样的尝试,得到了同样的错误。此外,在添加 @objcMembers 时,我在部分代码中也会遇到一些预期的类型错误。这发生在我导入 -Swift.h 文件的 .m 文件中包含的文件中。你的意思是分享我自己的 -Swift.h 文件吗?
    【解决方案3】:

    您可能需要为AVCaptureVideoDataOutputSampleBufferDelegate 添加@protocol

    @protocol AVCaptureVideoDataOutputSampleBufferDelegate;
    

    将其放在@interface 上方的project_name-Swift.h 文件中。

    【讨论】:

    • 添加这个并不能解决问题,不幸的是也不会更改错误代码。你的意思是在头文件中添加这一行对吗?或者还在我的 .swift 文件中添加协议?另外,是否可以更改这个 -Swift.h 文件?似乎每次我用 Cmd + shift + k 清理时xcode都会撤消我的更改
    • 尝试将其添加到您的Swift 文件中;关于撤消的更改——不知道。
    • 我不知道如何正确地做到这一点。这不正确是吗? :@objc public protocol AVCaptureVideoDataOutputSampleBufferDelegate{}
    猜你喜欢
    • 2016-04-08
    • 2016-11-05
    • 2020-12-30
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多