1
votes

Aucun type ou protocole nommé 'AVCaptureVideoDataOutputSampleBufferDelegate' dans le fichier d'en-tête -Swift.h

J'ai un projet Objective-C dans lequel j'utilise des scripts Swift parmi les scripts Obj-C.

Dans l'un des scripts Swift, j'ai une classe:

 #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

Comme il s'agit d'un projet Obj-C, je l'ai ajouté au début de @obj, afin qu'ils apparaissent dans mon ($ project_name-Swift.h) fichier d'en-tête.

J'obtiens l'erreur pour ce qui est écrit dans mon fichier d'en-tête:

// extrait du fichier d'en-tête: project_name-Swift.h

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

Je ne comprends pas ce qui en est la cause, et je suppose que cela a à voir avec l'impossibilité d'accéder correctement à la bibliothèque AVFoundation à partir du fichier d'en-tête ou quelque chose.

Des idées pour résoudre ce problème?


0 commentaires

3 Réponses :


0
votes

Vous devrez probablement ajouter le @protocol pour AVCaptureVideoDataOutputSampleBufferDelegate.

@protocol AVCaptureVideoDataOutputSampleBufferDelegate;

Mettez cela juste au-dessus de @interface code> dans votre fichier project_name-Swift.h .


3 commentaires

L'ajout de cela ne résout pas le problème et ne modifie malheureusement pas le code d'erreur. Vous vouliez simplement ajouter cette ligne dans le fichier d'en-tête? Ou aussi ajouter un protocole dans mon fichier .swift? Est-il également possible de modifier ce fichier -Swift.h? Il semble que xcode annule mes modifications à chaque fois que je nettoie avec Cmd + shift + k


Essayez de l'ajouter à votre fichier Swift ; concernant les changements d'annulation - aucune idée.


Je ne sais pas comment faire cela correctement. Ce n'est pas correct, n'est-ce pas? : @objc protocole public AVCaptureVideoDataOutputSampleBufferDelegate {}



1
votes

Essayez d'utiliser @objcMembers en plus de votre classe importée rapidement, cela vous assurera d'avoir accès à tout le code objective-c.


3 commentaires

Merci! l'a ajouté à ma classe, comme @objcMembers public class VideoCapture: NSObject, AVCaptureVideoDataOutputSampleBufferDelegate { Mais cela ne fonctionne toujours pas. J'obtiens dans mon fichier d'en-tête -swift: @interface VideoCapture: NSObject <- error Aucun type ou protocole nommé 'AVCaptureVideoDataOutputSampleBufferDelegate'


Essayez de remplacer ce délégué par d'autres qui compilent correctement et recherchent les différences. Si le problème n'est pas résolu, veuillez partager l'en-tête du fichier h de ce délégué problématique.


J'ai essayé la même chose avec AVCapturePhotoCaptureDelegate et j'obtiens la même erreur. De plus, lors de l'ajout de @objcMembers, j'obtiens également des erreurs de type attendues sur des parties du code. Cela se produit dans le fichier inclus dans mon fichier .m où j'importe le fichier -Swift.h. Voulez-vous partager mon propre fichier -Swift.h?



7
votes

J'ai eu le même problème. L'ajout de @objc ou @protocol n'aide pas. Je le résolve en ajoutant

#import <AVFoundation/AVFoundation.h>

au fichier PrefixHeader.pch juste avant #import . p>

J'espère que cela aide quelqu'un.


1 commentaires

Ouais, ça m'a vraiment aidé. Merci :)