2015-08-05 9 views
10

Ho esaminato tutti gli altri post con lo stesso errore (uso del tipo non dichiarato) ma non riesco ancora a capire cosa c'è di sbagliato nel mio progetto.Intestazione di bridging Swift - Utilizzo del tipo non registrato Errore 'FMDatabase'

La differenza con gli altri casi è che posso utilizzare correttamente il database FMDD in classi AppDelegate e ViewController ma non da un'altra classe che ho creato, sebbene nello stesso progetto delle classi AppDelegate e ViewController.

E con "uso corretto", voglio dire che posso accedere al database e alle tabelle al suo interno.

Si noti inoltre che non è necessario importare nulla per utilizzare FMDatabase in AppDelegate o ViewController.

Finora quello che ho fatto (Xcode 6.4 Swift 1.2.):

  1. Creato un unico punto di vista del progetto rapido.

  2. installati FMDB utilizzando cocoapods (https://cocoapods.org/?q=fmdb)

  3. creato un colpo di testa di ponte per FMDB

posso dichiarare con successo e utilizzare FMDatabase dalle classi AppDelegate.swift e 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 
    ... 

In DBUtil.swift se sto ricevendo il “Utilizzo di tipo non dichiarato‘FMDatabase’” errore.

DBUtil.swift

class DBUtil { 

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

} 

Un riproduttore è disponibile presso Swift Bridging Header.

Per qualsiasi suggerimento o idea, grazie in anticipo.

+0

Hai provato una dichiarazione esplicita di importazione? Inoltre, DBUtil è stato aggiunto allo stesso target? Solo un paio di pensieri ... –

+0

@RomanSausarnes Grazie per il tuo commento. Ho provato a importare ma ancora non riesco a trovare cosa importare. Nota anche che non ho bisogno di importare nulla per accedervi da AppDelegate o ViewController. E Sì DBUtil si trova nello stesso progetto di AppDelegate e ViewController, quindi dovrebbe essere lo stesso target, a meno che non mi sia sfuggito qualcosa. –

+0

I file possono avere obiettivi diversi anche se si trovano nello stesso progetto. Guardare attraverso le schede dell'ispettore nel pannello scorrevole della mano destra per alcune checkbox che indicano quali destinazioni sono state aggiunte, solo per essere sicuri. Questo sicuramente spiegherebbe il comportamento che stai vedendo. –

risposta

16

È perché DBUtil fa parte del target BridgingHeaderTests (ma il delegato dell'app e il controller di visualizzazione non lo sono), ma quella destinazione non è configurata per FMDB (l'impostazione "Intestazione di Bridging Objective-C" per l'obiettivo di test è vuoto).

È possibile:

  1. Rimuovere DBUtil dal target test:

    enter image description here

  2. o specificare l'intestazione colmare per il target test:

    enter image description here

+1

Rob: Spot on !!!! E molte grazie. La lezione: le intestazioni di bridging devono essere aggiunte per testare gli obiettivi (se necessario, ovviamente), ma c'è qualcosa da tenere a mente. –

+1

Il numero 2 ha risolto il mio problema con Swift non riconoscendo obj-C – SwiftMatt

+0

Incredibile Ho avuto lo stesso problema. Il mio file DatabaseHelper.swift ha 2 diverse appartenenze di destinazione, una non è intenzionale. Per tutto il tempo pensavo di aver perso qualcosa nelle Impostazioni di costruzione:/ – Motoko

1

lascio qui una risposta per gli altri casi: ho ottenuto lo stesso errore, ma il problema era nel mio header colmare ho dimenticato di scrivere #import "FMDatabase.h"

0

Il mio caso è stato lo stesso errore. L'ho risolto aggiungendo solo i file .h e .m (non la cartella) al progetto spuntando 'copia gli elementi quando necessario' & & crea gruppi e ce l'ha fatta. Quindi creato l'intestazione di bridging obj c.

Su Target's Build Phase-Link Binary con librerie- Aggiunto libsqlite3.tbd. Il contenuto incorporato convertito contiene il codice swift su Sì.

Ha risolto questo problema di riferimento.

+0

Ciao, George, ho un problema simile a 'AMSmoothAlert' (che è installato nei pod), quindi come posso lasciarlo usare in rapido ? – aircraft

1

Se è stato installato FMDB con CocoaPods, basta aggiungere

import FMDB 

nel file veloce in cui si sta utilizzando FMDatabase ..

Problemi correlati