web-dev-qa-db-fra.com

Swift Bridging Header - Utilisation de l'erreur 'FMDatabase' de type non déclaré

J’ai examiné tous les autres articles avec la même erreur (utilisation de type non déclaré), mais je n’arrive toujours pas à comprendre ce qui ne va pas avec mon projet.

La différence avec les autres cas est que je peux utiliser avec succès FMDatabase dans les classes AppDelegate et ViewController, mais pas à partir d'une autre classe que j'ai créée, bien que dans le même projet que les classes AppDelegate et ViewController.

Et par "utiliser avec succès", je veux dire que je peux accéder à la base de données et aux tables qu’elle contient.

Notez également que je n’ai rien importé pour utiliser FMDatabase dans AppDelegate ou ViewController.

Jusqu'ici ce que j'ai fait (Xcode. 6.4 Swift 1.2):

  1. Création d'un projet Swift à vue unique.

  2. FMDB installé à l'aide de cocoapods ( https://cocoapods.org/?q=fmdb )

  3. Création d'un en-tête de pontage pour FMDB

Je peux avec succès déclarer et utiliser FMDatabase à partir des classes AppDelegate.Swift et ViewController.Swift.

AppDelegate.Swift

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    var database: FMDatabase? // OK
    ...

ViewController.Swift

class ViewController: UIViewController {

    var database: FMDatabase? // OK
    ...

Dans DBUtil.Swift, j’obtiens cependant l’erreur «Utilisation du type non déclaré‘ FMDatabase ’».

DBUtil.Swift

class DBUtil {

    var database: FMDatabase? // Error: "Use of undeclared type 'FMDatabase'

}

Un reproducteur est disponible à l'adresse suivante: Swift Bridging Header .

Pour toutes astuces ou idées, merci d'avance.

10
Jack G.

C'est parce que DBUtil fait partie de la cible BridgingHeaderTests (mais que le délégué de l'application et le contrôleur de vue ne le sont pas), mais que cette cible n'est pas configurée pour FMDB (le paramètre "Objective-C Bridging Header" pour la cible de test est vide). 

Tu peux soit:

  1. Supprimez DBUtil de la cible des tests:

     enter image description here

  2. Ou spécifiez l'en-tête de pontage pour la cible de tests:

     enter image description here

17
Rob

Je laisse ici une réponse pour les autres cas: j'ai eu la même erreur, mais le problème était dans mon en-tête de pontage j'ai oublié d'écrire #import "FMDatabase.h"

1
user5273262

Si vous avez installé FMDB avec CocoaPods, ajoutez simplement

import FMDB

dans le fichier Swift où vous utilisez FMDatabase ..

1
balazs630

Mon cas était la même erreur. Je l'ai corrigé en ajoutant uniquement les fichiers .h et .m (pas le dossier) à projeter en cochant «Copier les éléments si nécessaire» et créer des groupes et le faire. Ensuite, créé obj c en-tête de pontage. 

Sur la construction cible Phases-Link binary with Libraries- Ajouté libsqlite3.tbd. Le contenu incorporé tourné contient du code Swift sur Oui. 

Il a résolu ce problème de référence.

0
A.G