2015-08-05 8 views
10

Я просмотрел все другие сообщения с той же ошибкой (использование необъявленного типа), но все еще не могу понять, что не так с моим проектом.Swift Bridging Header - использование необъявленного типа «FMDatabase» error

Разница с другими случаями заключается в том, что я могу успешно использовать FMDatabase в классах AppDelegate и ViewController, но не из другого класса, который я создал, хотя в том же проекте, что и классы AppDelegate и ViewController.

И «успешно использовать», я имею в виду, что я могу получить доступ к базе данных и таблицам.

Также обратите внимание, что мне не нужно было ничего импортировать для использования FMDatabase в AppDelegate или ViewController.

До сих пор, что я сделал (Xcode 6.4 Swift 1.2.):

  1. Создан быстрый проект одного вида.

  2. Устанавливаемого FMDB с использованием cocoapods (https://cocoapods.org/?q=fmdb)

  3. Создано заголовка связующего для FMDB

Я могу успешно объявить и использовать FMDatabase из классов AppDelegate.swift и 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 
    ... 

В DBUtil.swift хотя я получаю «Использование необъявленной типа„FMDatabase“» ошибка.

DBUtil.swift

class DBUtil { 

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

} 

репродуктора доступна на Swift Bridging Header.

Для любых советов или идей, заблаговременно.

+0

Вы пробовали явное заявление импорта? Кроме того, добавлен ли DBUtil к одной и той же цели? Просто пара мыслей ... –

+0

@RomanSausarnes Спасибо за ваш комментарий. Я попытался импортировать, но все еще не могу найти, что импортировать. Также обратите внимание, что мне не нужно было ничего импортировать для доступа к нему из AppDelegate или ViewController. И Да DBUtil находится в том же проекте, что и AppDelegate и ViewController, поэтому он должен быть одной и той же целью, если я не пропустил что-то. –

+0

Файлы могут иметь разные цели, даже если они находятся в одном проекте. Просматривайте вкладки инспектора в правой скользящей панели для некоторых флажков, указывающих, к каким целям он был добавлен, чтобы быть уверенным. Это определенно объяснит поведение, которое вы видите. –

ответ

16

Это связано с тем, что DBUtil является частью цели BridgingHeaderTests (но делегат приложения и контроллер вида не являются), но эта цель не настроена для FMDB (настройка целевого объекта «Objective-C Bridging Header») для тестовой цели пусто).

Вы можете:

  1. Удалить DBUtil от цели испытаний:

    enter image description here

  2. Или указать мостовую заголовок для цели испытаний:

    enter image description here

+1

Роб: Пятно на !!!! И большое спасибо. Урок: мосты заголовков должны быть добавлены для проверки целей (когда это необходимо, конечно), но что-то, о чем нужно помнить. –

+1

Номер 2 решил мою проблему с Swift, не признавая obj-C – SwiftMatt

+0

Невероятно, что у меня была такая же проблема. Мой файл DatabaseHelper.swift имеет 2 разных целевых члена, один из них непреднамерен. Все время я думал, что, возможно, что-то пропустил в своих настройках сборки:/ – Motoko

1

Я оставляю здесь ответ для других случаев: я получил ту же ошибку, но проблема была в моем мостиковом заголовке я забыл написать #import "FMDatabase.h"

0

Моего случай был той же ошибкой. Я исправил это, добавив только файлы .h и .m (а не папку), чтобы выполнить проект, отметив «копировать элементы при необходимости». & & создавать группы и создавать их. Затем созданный obj c мостовой заголовок.

На этапе сборки фаз-Ссылка-бинарный с библиотеками-Added libsqlite3.tbd. Включенный контент встраивания содержит быстрый код в Да.

Он решил эту справочную проблему.

+0

Привет, Джордж, у меня есть аналогичная проблема, которая есть «AMSmoothAlert» (которая установлена ​​в Pods), поэтому как я могу позволить ей использовать ее в swift ? – aircraft

1

Если вы установили FMDB с CocoaPods, просто добавьте

import FMDB 

в быстром файле, где вы используете FMDatabase ..

Смежные вопросы