2015-08-05 10 views
10

Zerknąłem na wszystkie inne posty z tym samym błędem (użycie niezadeklarowanego typu), ale wciąż nie mogę zrozumieć, co jest nie tak z moim projektem.Swift Bridging Header - użycie niezadeklarowanego typu "FMDatabase" error

Różnica między tymi przypadkami polega na tym, że mogę z powodzeniem używać FMDatabase w klasach AppDelegate i ViewController, ale nie z innej utworzonej przeze mnie klasy, chociaż w tym samym projekcie co klasy AppDelegate i ViewController.

"Przez pomyślne użycie" mam na myśli dostęp do bazy danych i tabel.

Należy również pamiętać, że nie musiałem importować niczego, aby korzystać z FMDatabase w AppDelegate lub ViewController.

tej pory co mam zrobić (Xcode 6.4 Swift 1.2.):

  1. Utworzono jednym widoku szybkiego projektu.

  2. Zainstalowane FMDB wykorzystujące cocoapods (https://cocoapods.org/?q=fmdb)

  3. Utworzony nagłówek pomostowego dla FMDB

mogę zadeklarować i skutecznie wykorzystywać FMDatabase z klas AppDelegate.swift i 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 
    ... 

W DBUtil.swift chociaż dostaję „użytkowania typu nierejestrowanej«FMDatabase»” błąd.

DBUtil.swift

class DBUtil { 

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

} 

adapter jest dostępny w Swift Bridging Header.

W przypadku jakichkolwiek wskazówek lub pomysłów, z góry dziękuję.

+0

Czy próbowałeś wyraźnej instrukcji import? Czy DBUtil został dodany do tego samego celu? Tylko kilka myśli ... –

+0

@RomanSausarnes Dziękuję za komentarz. Próbowałem zaimportować, ale nadal nie mogę znaleźć tego, co można zaimportować. Zauważ też, że nie musiałem importować niczego, aby uzyskać do niego dostęp z AppDelegate lub ViewController. I tak DBUtil jest w tym samym projekcie co AppDelegate i ViewController, więc powinien być ten sam cel, chyba że coś przeoczyłem. –

+0

Pliki mogą mieć różne cele, nawet jeśli znajdują się w tym samym projekcie. Przejrzyj karty kontrolne na prawym panelu przesuwnym, aby zobaczyć pola, do których zostały dodane, aby mieć pewność. To zdecydowanie wyjaśniłoby zachowanie, które widzisz. –

Odpowiedz

16

To dlatego DBUtil jest częścią tarczy BridgingHeaderTests (ale app pełnomocnika i sterownikiem widoku nie), lecz docelowy nie jest skonfigurowany do FMDB („Celu -C mostkowania Nagłówek” ustawienie tarczy testu jest pusty).

Można:

  1. Usuń DBUtil od celu badania:

    enter image description here

  2. lub określić pomostowego nagłówek cel badań:

    enter image description here

+1

Rob: Spot on !!!! I wielkie dzięki. Lekcja: nagłówki pomostowe muszą zostać dodane do celów testowych (w razie potrzeby oczywiście), ale o czym należy pamiętać. –

+1

Numer 2 rozwiązał mój problem z Swift nie rozpoznając obj-C – SwiftMatt

+0

Niewiarygodne Miałem ten sam problem. Plik My DatabaseHelper.swift ma 2 różne docelowe członkostwa, jedno jest niezamierzone. Przez cały czas myślałem, że mogłem przegapić coś w moich ustawieniach kompilacji:/ – Motoko

1

Zostawiam tu odpowiedź dla innych przypadkach: Mam ten sam problem, ale problem był w moim pomostowego nagłówku Zapomniałam napisać #import "FMDatabase.h"

0

Mój przypadek był taki sam błąd. Naprawiłem to, dodając tylko pliki .h i .m (nie folder) do projektu, zaznaczając "kopiuj elementy w razie potrzeby" & & twórz grupy i je stwórz. Następnie utworzono nagłówek mostu obj c.

Binarne kompilacje z bibliotekami Target-Target - Dodano bibliotekę libsqlite3.tbd. Włączona treść do umieszczania na stronie zawiera kod Swift na Tak.

Rozwiązał ten problem referencyjny.

+0

Cześć, George, mam podobny problem, który jest "AMSmoothAlert" (który jest zainstalowany w kapsułach), więc jak mogę pozwolić mu na użycie go w szybkim tempie? ? – aircraft

1

Jeśli zainstalowano FMDB z CocoaPods, wystarczy dodać

import FMDB 

w pliku szybkiej gdzie używasz FMDatabase ..