2015-08-05 22 views
10

Tôi đã xem xét tất cả các bài đăng khác có lỗi tương tự (sử dụng loại không khai báo) nhưng vẫn không thể tìm ra điều gì sai với dự án của tôi.Swift Bridging Header - Sử dụng lỗi không khai báo 'FMDatabase'

Sự khác biệt với các trường hợp khác là tôi có thể sử dụng thành công FMDatabase trong các lớp AppDelegate và ViewController nhưng không phải từ lớp khác mà tôi đã tạo, mặc dù trong cùng một dự án với lớp AppDelegate và ViewController.

Và bằng "sử dụng thành công", tôi có nghĩa là tôi có thể truy cập vào cơ sở dữ liệu và các bảng trong đó.

Cũng lưu ý rằng tôi không phải nhập bất kỳ thứ gì để sử dụng FMDatabase trong AppDelegate hoặc ViewController.

Cho đến nay những gì tôi đã làm (Xcode 6.4 Swift 1.2.):

  1. Tạo một dự án nhanh chóng nhìn duy nhất.

  2. cài đặt FMDB sử dụng cocoapods (https://cocoapods.org/?q=fmdb)

  3. Tạo một tiêu đề cầu nối cho FMDB

tôi thành công có thể khai báo và sử dụng FMDatabase từ các lớp AppDelegate.swift và 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 
    ... 

Trong DBUtil.swift mặc dù tôi nhận được “Sử dụng kiểu khai báo‘FMDatabase’” lỗi.

DBUtil.swift

class DBUtil { 

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

} 

Một người mô phỏng có sẵn tại Swift Bridging Header.

Để biết bất kỳ gợi ý hoặc ý tưởng nào, cảm ơn bạn trước.

+0

Các bạn đã thử một tuyên bố nhập khẩu rõ ràng? Ngoài ra, DBUtil có được thêm vào cùng một mục tiêu không? Chỉ cần một vài suy nghĩ ... –

+0

@RomanSausarnes Cảm ơn bạn đã bình luận của bạn. Tôi đã cố gắng nhập nhưng vẫn không thể tìm thấy những gì cần nhập. Cũng lưu ý tôi không cần phải nhập bất cứ thứ gì để truy cập nó từ AppDelegate hoặc ViewController. Và có DBUtil là trong cùng một dự án như AppDelegate và ViewController, vì vậy nó phải là cùng một mục tiêu, trừ khi tôi bị mất một cái gì đó. –

+0

Tệp có thể có các mục tiêu khác nhau ngay cả khi chúng nằm trong cùng một dự án. Xem qua các tab thanh tra trong bảng điều khiển trượt bên phải cho một số hộp kiểm cho biết mục tiêu nào đã được thêm vào, chỉ để chắc chắn. Điều đó chắc chắn sẽ giải thích hành vi bạn đang thấy. –

Trả lời

16

Đó là bởi vì DBUtil là một phần của mục tiêu BridgingHeaderTests (nhưng ủy nhiệm ứng dụng và bộ điều khiển chế độ xem không), nhưng mục tiêu đó không được định cấu hình cho FMDB (cài đặt "Mục tiêu-C Bridging Header" cho mục tiêu thử nghiệm là trống).

Bạn có thể:

  1. Di DBUtil từ các bài kiểm tra mục tiêu:

    enter image description here

  2. Hoặc xác định header bắc cầu cho mục tiêu kiểm tra:

    enter image description here

+1

Rob: Spot on !!!! Và cảm ơn rất nhiều. Bài học: các tiêu đề bắc cầu phải được thêm vào các mục tiêu kiểm tra (khi thích hợp tất nhiên), nhưng cần lưu ý điều gì đó. –

+1

Số 2 giải quyết vấn đề của tôi với Swift không nhận ra obj-C – SwiftMatt

+0

Không thể tin được Tôi có cùng một vấn đề. File DatabaseHelper.swift của tôi có 2 thành viên Target khác nhau, một là không chủ ý. Tất cả thời gian tôi đã nghĩ rằng tôi có thể đã bỏ lỡ điều gì đó trong Cài đặt Xây dựng:/ – Motoko

1

tôi rời khỏi đây trả lời cho các trường hợp khác: Tôi đã nhận các lỗi tương tự, nhưng vấn đề là trong phần đầu bắc cầu của tôi, tôi quên viết #import "FMDatabase.h"

0

trường hợp của tôi là lỗi tương tự. Tôi đã sửa nó bằng cách chỉ thêm các tệp .h và .m (không phải thư mục) vào dự án bằng cách chọn 'sao chép các mục khi cần' & & tạo các nhóm và tạo nó. Sau đó tạo tiêu đề cầu nối obj c.

Trên mục tiêu xây dựng giai đoạn-liên kết nhị phân với thư viện- Thêm libsqlite3.tbd. Nội dung nhúng có chứa mã nhanh để Có.

Nó giải quyết vấn đề tham chiếu này.

+0

Xin chào, George, tôi gặp sự cố tương tự là 'AMSmoothAlert' (được cài đặt trong Pod), vậy làm cách nào để tôi sử dụng nó nhanh chóng ? – aircraft

1

Nếu bạn cài đặt FMDB với CocoaPods, chỉ cần thêm

import FMDB 

trong file nhanh chóng mà bạn đang sử dụng FMDatabase ..

Các vấn đề liên quan